public string CreateJob(string jsondata) { Console.WriteLine("ManagerJobController: Creating job: json=" + jsondata); var jr = new JsonReader(jsondata); var jx = jr.Deserialize(); var jo = jx as Dictionary<string, object>; if (jo == null) return ""; var newjob = new ManagerJob(); newjob.Controller = this; newjob.ID = Guid.NewGuid().ToString().Replace("-", "").Substring(0, 10); int numworkers = 2; if (jo.ContainsKey("instances")) numworkers = int.Parse(jo["instances"].ToString()); if (jo.ContainsKey("callback")) newjob.CallbackUrl = jo["callback"].ToString(); if (jo.ContainsKey("jobtype")) newjob.JobType = jo["jobtype"].ToString(); newjob.JobArgs = new DefaultJobArgs(); if (jo.ContainsKey("jobargs")) Utilities.FillArgsFromJson(newjob.JobArgs, jo["jobargs"]); Console.WriteLine("ManagerJobController: Trying to get " + numworkers + " instances."); var idleworkerlist = ProvisionWorkers(numworkers); foreach (var workerurl in idleworkerlist) { // create job on workers Console.WriteLine("ManagerJobController: Telling worker at " + workerurl + " to create a job..."); var winfo = GetWorkerByUrl(workerurl); winfo.RemoteJobId = ""; var wc = new WebClient(); var jobinfo = BuildCreateJobData(newjob); try { winfo.RemoteJobId = wc.UploadString(Utilities.CombineURL(winfo.URL, "/createjob"), jobinfo); } catch (Exception z) { Console.WriteLine(z); } Console.WriteLine("Created remote job id: " + winfo.RemoteJobId); if (winfo.RemoteJobId != "") newjob.Workers.Add(winfo); } Console.WriteLine("ManagerJobController: Got " + newjob.Workers.Count + " workers."); // newjob.CallbackUrl = jo["managerurl"]; Console.WriteLine("ManagerJobController: Created job " + newjob.ID);//+ " with callback url " + newjob.CallbackUrl); m_jobs.Add(newjob); return newjob.ID; }
private string BuildCreateJobData(ManagerJob newjob) { var jobinfo = new StringBuilder(); jobinfo.Append("{\"jobtype\":\"").Append(Utilities.EscapeJson(newjob.JobType)).Append("\","); var argjson = Utilities.BuildJsonFromArgs(newjob.JobArgs); if (!string.IsNullOrEmpty(argjson)) jobinfo.Append("\"jobargs\":" + argjson + ","); var callbackurl = "http://" + _manager.Config.Hostname + ":" + _manager.Config.Port + "/job/" + newjob.ID + "/worker-callback"; jobinfo.Append("\"callback\":\"").Append(Utilities.EscapeJson(callbackurl)).Append("\"}"); return jobinfo.ToString(); }