Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/13/10 01:21:32 (14 years ago)
Author:
swagner
Message:

Worked on OKB data model and services (#1174).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Services.OKB/3.3/RunnerService.cs

    r4321 r4381  
    2727using System.Web.Security;
    2828using HeuristicLab.Services.OKB.DataAccess;
    29 using log4net;
    3029
    3130namespace HeuristicLab.Services.OKB {
    32 
    3331  /// <summary>
    3432  /// Implementation of the <see cref="IRunnerService"/>.
    3533  /// </summary>
    36   [ServiceBehavior(
    37     InstanceContextMode = InstanceContextMode.PerSession)]
     34  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
    3835  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 
    5736    /// <summary>
    5837    /// Obtain a "starter kit" of information, containing:
     
    6443    /// </summary>
    6544    public StarterKit GetStarterKit(string platformName) {
    66       Log("distributing starter kit");
    6745      Platform platform;
    6846      using (OKBDataContext okb = new OKBDataContext()) {
     
    8664        var StarterKit = new StarterKit() {
    8765          AlgorithmClasses = okb.AlgorithmClasses.ToList(),
    88           ProblemClasses = okb.ProblemClasses.ToList(),
    89           Projects = okb.Projects.ToList()
     66          ProblemClasses = okb.ProblemClasses.ToList()
    9067        };
    9168        return StarterKit;
     
    10077    /// </summary>
    10178    public ExperimentKit PrepareExperiment(Algorithm algorithm, Problem problem) {
    102       Log("preparing experiment: {0}@{1}", algorithm.Name, problem.Name);
    10379      OKBDataContext okb = new OKBDataContext();
    10480      try {
    10581        DataLoadOptions dlo = new DataLoadOptions();
    10682        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);
    10885        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);
    11286        okb.LoadOptions = dlo;
    11387        algorithm = okb.Algorithms.Single(a => a.Id == algorithm.Id);
    11488        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();
    12195        return new ExperimentKit() {
    12296          Algorithm = algorithm,
     
    12599      }
    126100      catch (Exception x) {
    127         Log("exception caught: " + x.ToString());
    128101        throw new FaultException("Excaption caught: " + x.ToString());
    129102      }
     
    141114    /// <param name="problem">The problem.</param>
    142115    /// <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) {
    146117      try {
    147118        using (OKBDataContext okb = new OKBDataContext()) {
    148           Experiment experiment = GetOrCreateExperiment(algorithm, problem, project, currentUser, okb);
     119          Experiment experiment = GetOrCreateExperiment(algorithm, problem, currentUser, okb);
    149120          Run run = new Run() {
    150121            Experiment = experiment,
     
    159130      }
    160131      catch (Exception x) {
    161         Log(x.ToString());
    162132        throw new FaultException("Could not add run: " + x.ToString());
    163133      }
    164134    }
    165135
    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) {
    168137      MatchResults(algorithm.Results, okb);
    169138      EnsureParametersExist(algorithm.Parameters, okb);
    170       var experimentQuery = CreateExperimentQuery(algorithm, problem, project, okb);
     139      var experimentQuery = CreateExperimentQuery(algorithm, problem, okb);
    171140      if (experimentQuery.Count() > 0) {
    172         if (experimentQuery.Count() > 1)
    173           Log("Warning: duplicate experiment found");
    174         Log("reusing existing experiment");
    175141        Experiment experiment = experimentQuery.First();
    176142        return experiment;
    177143      } else {
    178         Log("creating new experiment");
    179144        Experiment experiment = new Experiment() {
    180145          AlgorithmId = algorithm.Id,
    181146          ProblemId = problem.Id,
    182           ProjectId = project.Id,
    183147          ParameterValues = algorithm.ParameterValues
    184148        };
     
    191155      foreach (var result in results.Where(r => r.Name != null)) {
    192156        result.Id = okb.Results.Single(r => r.Name == result.Name).Id;
    193         Log("mapping named result {0} -> Id {1}", result.Name, result.Id);
    194157        var value = result.ResultValue;
    195158        if (value != null) {
     
    205168        DataType dataType = GetOrCreateDataType(okb, param.DataType.ClrName);
    206169        param.DataType = new DataType() { Id = dataType.Id };
    207         Log("mapping datatype {0} to id {1}", dataType.ClrName, dataType.Id);
    208170      }
    209171      okb.SubmitChanges();
     
    211173      var newParams = namedParams.Except(okb.Parameters, new NameComprarer());
    212174      foreach (var p in newParams) {
    213         Log("creating new parameter {0} ({2}:{1})", p.Name, p.DataType.ClrName, p.DataType.Id);
    214175        okb.Parameters.InsertOnSubmit(new Parameter() {
    215176          Name = p.Name,
     
    220181      foreach (var np in namedParams) {
    221182        np.Id = okb.Parameters.Single(p => p.Name == np.Name).Id;
    222         Log("mapping named parameter {0} -> Id {1}", np.Name, np.Id);
    223183        var value = np.ParameterValue;
    224184        if (value != null) {
     
    231191            DataType dataType = GetOrCreateDataType(okb, opVal.DataType.ClrName);
    232192            newVal.DataType = new DataType() { Id = dataType.Id };
    233             Log("mapping operator parameter datatype {0} to id {1}", dataType.ClrName, dataType.Id);
    234193          }
    235194        }
     
    240199      DataType dataType = okb.DataTypes.SingleOrDefault(dt => dt.ClrName == clrName);
    241200      if (dataType == null) {
    242         Log("creating new datatype for ", clrName);
    243201        dataType = new DataType() {
    244202          ClrName = clrName,
     
    251209    }
    252210
    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) {
    255212      var experimentQuery =
    256213        from x in okb.Experiments
    257214        where x.Algorithm == algorithm
    258215        where x.Problem == problem
    259         where x.ProjectId == project.Id
    260216        select x;
    261217      foreach (IntParameterValue ipv in algorithm.IntParameterValues) {
     
    279235            p.ParameterId == opv.ParameterId && p.DataTypeId == opv.DataTypeId));
    280236      }
    281       Log("experiment query: ", experimentQuery.Expression.ToString());
    282237      return experimentQuery;
    283238    }
     
    310265      MembershipUser user = Membership.GetUser();
    311266
    312       Log("Authenticating {0}@{1}", user.UserName, clientname);
    313267      if (user == null ||
    314268          string.IsNullOrEmpty(clientname) ||
    315269          ServiceSecurityContext.Current.IsAnonymous) {
    316         Log("rejecting anonymous login");
    317270        return false;
    318271      }
     
    330283          okb.SubmitChanges();
    331284        }
    332         Log("  user = {0}, client = {1}", currentUser, currentClient);
    333285        return true;
    334286      }
     
    339291    /// </summary>
    340292    public void Logout() {
    341       Log("Logging out");
    342293      currentUser = null;
    343294      currentClient = null;
     
    348299    /// </summary>
    349300    public void Dispose() {
    350       Log("Closing session...");
    351301      Logout();
    352302    }
     
    383333      return obj.Name.GetHashCode();
    384334    }
    385 
    386335  }
    387336}
Note: See TracChangeset for help on using the changeset viewer.