- Timestamp:
- 09/13/10 01:21:32 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Services.OKB/3.3/RunnerService.cs
r4321 r4381 27 27 using System.Web.Security; 28 28 using HeuristicLab.Services.OKB.DataAccess; 29 using log4net;30 29 31 30 namespace HeuristicLab.Services.OKB { 32 33 31 /// <summary> 34 32 /// Implementation of the <see cref="IRunnerService"/>. 35 33 /// </summary> 36 [ServiceBehavior( 37 InstanceContextMode = InstanceContextMode.PerSession)] 34 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 38 35 public class RunnerService : IRunnerService, IDisposable { 39 40 private Guid sessionID;41 private static ILog logger = LogManager.GetLogger(typeof(RunnerService));42 43 private void Log(string message, params object[] args) {44 using (log4net.ThreadContext.Stacks["NDC"].Push(sessionID.ToString())) {45 logger.Info(String.Format(message, args));46 }47 }48 49 /// <summary>50 /// Initializes a new instance of the <see cref="RunnerService"/> class.51 /// </summary>52 public RunnerService() {53 sessionID = Guid.NewGuid();54 Log("Instantiating new service");55 }56 57 36 /// <summary> 58 37 /// Obtain a "starter kit" of information, containing: … … 64 43 /// </summary> 65 44 public StarterKit GetStarterKit(string platformName) { 66 Log("distributing starter kit");67 45 Platform platform; 68 46 using (OKBDataContext okb = new OKBDataContext()) { … … 86 64 var StarterKit = new StarterKit() { 87 65 AlgorithmClasses = okb.AlgorithmClasses.ToList(), 88 ProblemClasses = okb.ProblemClasses.ToList(), 89 Projects = okb.Projects.ToList() 66 ProblemClasses = okb.ProblemClasses.ToList() 90 67 }; 91 68 return StarterKit; … … 100 77 /// </summary> 101 78 public ExperimentKit PrepareExperiment(Algorithm algorithm, Problem problem) { 102 Log("preparing experiment: {0}@{1}", algorithm.Name, problem.Name);103 79 OKBDataContext okb = new OKBDataContext(); 104 80 try { 105 81 DataLoadOptions dlo = new DataLoadOptions(); 106 82 dlo.LoadWith<Problem>(p => p.SolutionRepresentation); 107 dlo.LoadWith<Parameter>(p => p.DataType); 83 dlo.LoadWith<AlgorithmParameter>(p => p.DataType); 84 dlo.LoadWith<ProblemParameter>(p => p.DataType); 108 85 dlo.LoadWith<Result>(r => r.DataType); 109 dlo.LoadWith<Algorithm_Parameter>(ap => ap.Parameter);110 dlo.LoadWith<Problem_Parameter>(pp => pp.Parameter);111 dlo.LoadWith<Algorithm_Result>(ar => ar.Result);112 86 okb.LoadOptions = dlo; 113 87 algorithm = okb.Algorithms.Single(a => a.Id == algorithm.Id); 114 88 problem = okb.Problems.Single(p => p.Id == problem.Id); 115 algorithm.Algorithm _Parameters.Load();116 algorithm. Algorithm_Results.Load();117 problem. IntProblemCharacteristicValues.Load();118 problem. FloatProblemCharacteristicValues.Load();119 problem. CharProblemCharacteristicValues.Load();120 problem.Problem _Parameters.Load();89 algorithm.AlgorithmParameters.Load(); 90 algorithm.Results.Load(); 91 problem.ProblemCharacteristicIntValues.Load(); 92 problem.ProblemCharacteristicFloatValues.Load(); 93 problem.ProblemCharacteristicStringValues.Load(); 94 problem.ProblemParameters.Load(); 121 95 return new ExperimentKit() { 122 96 Algorithm = algorithm, … … 125 99 } 126 100 catch (Exception x) { 127 Log("exception caught: " + x.ToString());128 101 throw new FaultException("Excaption caught: " + x.ToString()); 129 102 } … … 141 114 /// <param name="problem">The problem.</param> 142 115 /// <param name="project">The project.</param> 143 public void AddRun(Algorithm algorithm, Problem problem, Project project) { 144 Log("adding run for {0}@{1}({2})[{3}, {4}]", 145 algorithm.Name, problem.Name, project.Name, currentUser.Name, currentClient.Name); 116 public void AddRun(Algorithm algorithm, Problem problem) { 146 117 try { 147 118 using (OKBDataContext okb = new OKBDataContext()) { 148 Experiment experiment = GetOrCreateExperiment(algorithm, problem, project,currentUser, okb);119 Experiment experiment = GetOrCreateExperiment(algorithm, problem, currentUser, okb); 149 120 Run run = new Run() { 150 121 Experiment = experiment, … … 159 130 } 160 131 catch (Exception x) { 161 Log(x.ToString());162 132 throw new FaultException("Could not add run: " + x.ToString()); 163 133 } 164 134 } 165 135 166 private Experiment GetOrCreateExperiment(Algorithm algorithm, Problem problem, 167 Project project, User user, OKBDataContext okb) { 136 private Experiment GetOrCreateExperiment(Algorithm algorithm, Problem problem, User user, OKBDataContext okb) { 168 137 MatchResults(algorithm.Results, okb); 169 138 EnsureParametersExist(algorithm.Parameters, okb); 170 var experimentQuery = CreateExperimentQuery(algorithm, problem, project,okb);139 var experimentQuery = CreateExperimentQuery(algorithm, problem, okb); 171 140 if (experimentQuery.Count() > 0) { 172 if (experimentQuery.Count() > 1)173 Log("Warning: duplicate experiment found");174 Log("reusing existing experiment");175 141 Experiment experiment = experimentQuery.First(); 176 142 return experiment; 177 143 } else { 178 Log("creating new experiment");179 144 Experiment experiment = new Experiment() { 180 145 AlgorithmId = algorithm.Id, 181 146 ProblemId = problem.Id, 182 ProjectId = project.Id,183 147 ParameterValues = algorithm.ParameterValues 184 148 }; … … 191 155 foreach (var result in results.Where(r => r.Name != null)) { 192 156 result.Id = okb.Results.Single(r => r.Name == result.Name).Id; 193 Log("mapping named result {0} -> Id {1}", result.Name, result.Id);194 157 var value = result.ResultValue; 195 158 if (value != null) { … … 205 168 DataType dataType = GetOrCreateDataType(okb, param.DataType.ClrName); 206 169 param.DataType = new DataType() { Id = dataType.Id }; 207 Log("mapping datatype {0} to id {1}", dataType.ClrName, dataType.Id);208 170 } 209 171 okb.SubmitChanges(); … … 211 173 var newParams = namedParams.Except(okb.Parameters, new NameComprarer()); 212 174 foreach (var p in newParams) { 213 Log("creating new parameter {0} ({2}:{1})", p.Name, p.DataType.ClrName, p.DataType.Id);214 175 okb.Parameters.InsertOnSubmit(new Parameter() { 215 176 Name = p.Name, … … 220 181 foreach (var np in namedParams) { 221 182 np.Id = okb.Parameters.Single(p => p.Name == np.Name).Id; 222 Log("mapping named parameter {0} -> Id {1}", np.Name, np.Id);223 183 var value = np.ParameterValue; 224 184 if (value != null) { … … 231 191 DataType dataType = GetOrCreateDataType(okb, opVal.DataType.ClrName); 232 192 newVal.DataType = new DataType() { Id = dataType.Id }; 233 Log("mapping operator parameter datatype {0} to id {1}", dataType.ClrName, dataType.Id);234 193 } 235 194 } … … 240 199 DataType dataType = okb.DataTypes.SingleOrDefault(dt => dt.ClrName == clrName); 241 200 if (dataType == null) { 242 Log("creating new datatype for ", clrName);243 201 dataType = new DataType() { 244 202 ClrName = clrName, … … 251 209 } 252 210 253 private IQueryable<Experiment> CreateExperimentQuery(Algorithm algorithm, Problem problem, Project project, 254 OKBDataContext okb) { 211 private IQueryable<Experiment> CreateExperimentQuery(Algorithm algorithm, Problem problem, OKBDataContext okb) { 255 212 var experimentQuery = 256 213 from x in okb.Experiments 257 214 where x.Algorithm == algorithm 258 215 where x.Problem == problem 259 where x.ProjectId == project.Id260 216 select x; 261 217 foreach (IntParameterValue ipv in algorithm.IntParameterValues) { … … 279 235 p.ParameterId == opv.ParameterId && p.DataTypeId == opv.DataTypeId)); 280 236 } 281 Log("experiment query: ", experimentQuery.Expression.ToString());282 237 return experimentQuery; 283 238 } … … 310 265 MembershipUser user = Membership.GetUser(); 311 266 312 Log("Authenticating {0}@{1}", user.UserName, clientname);313 267 if (user == null || 314 268 string.IsNullOrEmpty(clientname) || 315 269 ServiceSecurityContext.Current.IsAnonymous) { 316 Log("rejecting anonymous login");317 270 return false; 318 271 } … … 330 283 okb.SubmitChanges(); 331 284 } 332 Log(" user = {0}, client = {1}", currentUser, currentClient);333 285 return true; 334 286 } … … 339 291 /// </summary> 340 292 public void Logout() { 341 Log("Logging out");342 293 currentUser = null; 343 294 currentClient = null; … … 348 299 /// </summary> 349 300 public void Dispose() { 350 Log("Closing session...");351 301 Logout(); 352 302 } … … 383 333 return obj.Name.GetHashCode(); 384 334 } 385 386 335 } 387 336 }
Note: See TracChangeset
for help on using the changeset viewer.