/// <summary> /// 添加部署任务 /// </summary> /// <param name="taskSourceName">任务名,仅仅用做备注任务</param> /// <param name="deployTask">部署任务信息,包括模板类型和设备DN</param> /// <returns>返回eSight任务名</returns> public string AddDeployTask(string taskSourceName, DeployTask deployTask) { StringBuilder sb = new StringBuilder(ConstMgr.HWESightHost.URL_TASK_DEPLOY); IList <KeyValuePair <string, object> > parameters = new List <KeyValuePair <string, object> >(); parameters.Add(new KeyValuePair <string, object>("templates", deployTask.Templates)); parameters.Add(new KeyValuePair <string, object>("dn", deployTask.DeviceDn)); JObject jResult = ESSession.HCPostForm(sb.ToString(), parameters); CheckAndThrowException(jResult); HWESightTask eSightTask = new HWESightTask(); QueryObjectResult <JObject> queryObjectResult = jResult.ToObject <QueryObjectResult <JObject> >(); eSightTask.HWESightHostID = this.ESSession.HWESightHost.ID; eSightTask.TaskName = JsonUtil.GetJObjectPropVal <string>(queryObjectResult.Data, "taskName"); eSightTask.SoftWareSourceName = taskSourceName; eSightTask.TaskStatus = ConstMgr.HWESightTask.TASK_STATUS_RUNNING;//初始化。 eSightTask.TaskProgress = 0; eSightTask.TaskResult = ""; eSightTask.ErrorDetail = ""; eSightTask.SyncStatus = ConstMgr.HWESightTask.SYNC_STATUS_CREATED; eSightTask.TaskType = ConstMgr.HWESightTask.TASK_TYPE_DEPLOY; eSightTask.LastModifyTime = System.DateTime.Now; eSightTask.CreateTime = System.DateTime.Now; int taskId = HWESightTaskDal.Instance.InsertEntity(eSightTask); eSightTask.ID = taskId; InsertHWTaskResourceList(eSightTask, deployTask.DeviceDn); LogUtil.HWLogger.API.InfoFormat("AddDeployTask:{0}", taskId); return(JsonUtil.GetJObjectPropVal <string>(queryObjectResult.Data, "taskName")); }
/// <summary> /// 同步任务状态到数据库。 /// </summary> /// <param name="queryObjectResult">查询结果</param> /// <param name="taskName">任务名</param> private void SaveTaskProgressToDB(QueryObjectResult <DeployProgress> queryObjectResult, string taskName) { //sync to the database. DeployProgress deployProgress = queryObjectResult.Data; HWESightTask hwtask = HWESightTaskDal.Instance.FindTaskByName(this.ESSession.HWESightHost.ID, taskName); hwtask.TaskStatus = deployProgress.TaskStatus; hwtask.TaskResult = deployProgress.TaskResult; hwtask.TaskCode = (!string.IsNullOrEmpty(deployProgress.TaskCode) && !string.Equals(deployProgress.TaskCode, "0")) ? (errorPix + deployProgress.TaskCode) : deployProgress.TaskCode; hwtask.ErrorDetail = deployProgress.ErrorDetail; hwtask.LastModifyTime = System.DateTime.Now; //find child device in database. int progress = UpdateHWTaskResourceList(hwtask, deployProgress); if (progress > 0) { hwtask.TaskProgress = progress;// deployProgress.TaskProgress; } else { hwtask.TaskProgress = deployProgress.TaskProgress; } if (progress == 100) { hwtask.SyncStatus = ConstMgr.HWESightTask.SYNC_STATUS_FINISHED; } hwtask.SyncStatus = GetTaskStatus(hwtask.SyncStatus, deployProgress.TaskStatus, deployProgress.TaskResult, deployProgress.TaskCode); HWESightTaskDal.Instance.UpdateEntity(hwtask); }
private int UpdateHWTaskResourceList(HWESightTask hwtask, DeployPackageTaskDetail deployProgress) { /* * bool isFinsihed = false; * int finishedCnt = 0; * IList<HWTaskResource> resourceList = HWTaskResourceDal.Instance.FindTaskResourceByTaskId(hwtask.ID); * Dictionary<string, DeviceProgress> dviDict = new Dictionary<string, DeviceProgress>(); * foreach (DeviceProgress deviceProgress in deployProgress.DeviceDetails) * { * dviDict[deviceProgress.DeviceDn.ToUpper()] = deviceProgress; * } * foreach (HWTaskResource hwResource in resourceList) * { * DeviceProgress deviceProgress = dviDict[hwResource.DN.ToUpper()]; * hwResource.DeviceResult = deviceProgress.DeviceResult; * hwResource.DeviceProgress = deviceProgress.Progress; * hwResource.ErrorDetail = deviceProgress.ErrorDetail; * hwResource.TaskType = ConstMgr.HWESightTask.TASK_TYPE_DEPLOY; * hwResource.SyncStatus = hwtask.SyncStatus; * hwResource.LastModifyTime = System.DateTime.Now; * HWTaskResourceDal.Instance.UpdateEntity(hwResource); * if (deviceProgress.Progress == 100) finishedCnt++; * } * if (resourceList.Count > 0) * return (finishedCnt * 100) / resourceList.Count; * else * return 0;*/ return(0); }
/// <summary> /// 保存上传软件源进度到数据。 /// </summary> /// <param name="queryObjectResult">返回的软件源进度对戏</param> /// <param name="taskName">eSight对应的任务名。</param> private void SaveTaskProgressToDB(QueryObjectResult <SourceProgress> queryObjectResult, string taskName) { //sync to the database. SourceProgress sourceProgress = queryObjectResult.Data; HWESightTask hwtask = HWESightTaskDal.Instance.FindTaskByName(this.ESSession.HWESightHost.ID, taskName); hwtask.TaskStatus = sourceProgress.TaskStatus; hwtask.TaskProgress = sourceProgress.TaskProgress; hwtask.TaskResult = sourceProgress.TaskResult; hwtask.TaskCode = (!string.IsNullOrEmpty(sourceProgress.TaskCode) && !string.Equals(sourceProgress.TaskCode, "0")) ? ("deploy.error." + sourceProgress.TaskCode) : sourceProgress.TaskCode; hwtask.ErrorDetail = sourceProgress.ErrorDetail; hwtask.SyncStatus = GetTaskStatus(hwtask.SyncStatus, sourceProgress.TaskStatus, sourceProgress.TaskResult, sourceProgress.TaskCode); hwtask.LastModifyTime = System.DateTime.Now; HWESightTaskDal.Instance.UpdateEntity(hwtask); /* if (hwtask == null) * { * throw new SoftwareSourceExpceion(ConstMgr.ErrorCode.DB_NOTFOUND, this, string.Format("查询软件源上传进度出错:数据库没有找到对应的任务。[{0}]", taskName)); * } * else * { * hwtask.TaskStatus = sourceProgress.TaskStatus; * hwtask.TaskProgress = sourceProgress.TaskProgress; * hwtask.TaskResult = sourceProgress.TaskResult; * hwtask.TaskCode = sourceProgress.TaskCode; * hwtask.ErrorDetail = sourceProgress.ErrorDetail; * hwtask.SyncStatus = ConstMgr.HWESightTask.SYNC_STATUS_FINISHED; * hwtask.LastModifyTime = System.DateTime.Now; * HWESightTaskDal.Instance.UpdateEntity(hwtask); * }*/ }
/// <summary> /// 删除软件源,从数据库。 /// </summary> /// <param name="basepackageName">软件源名称,eSight 返回的任务名</param> private void DeleteTaskProgressFromDBByName(string basepackageName) { HWESightTask hwTask = HWESightTaskDal.Instance.FindTaskBySourceName(this.ESSession.HWESightHost.ID, basepackageName); if (hwTask != null) { HWESightTaskDal.Instance.DeleteEntityById(hwTask.ID); } else { LogUtil.HWLogger.API.WarnFormat("System can't find this package in the database=[{0}]", basepackageName); } }
/// <summary> /// 查询上传软件源进度 /// </summary> /// <param name="taskName">eSight 返回的任务名</param> /// <returns>上传软件源进度对象</returns> public SourceProgress QuerySoftwareProcess(string taskName) { StringBuilder sb = new StringBuilder(ConstMgr.HWESightHost.URL_PROGRESS_SOFTWARESOURCE); sb.Append("?taskName=").Append(HttpUtility.UrlEncode(taskName, Encoding.UTF8)); JObject jResult = ESSession.HCGet(sb.ToString()); CheckAndThrowException(jResult); QueryObjectResult <SourceProgress> queryObjectResult = jResult.ToObject <QueryObjectResult <SourceProgress> >(); //sync to the database. HWESightTask hwtask = HWESightTaskDal.Instance.FindTaskByName(this.ESSession.HWESightHost.ID, taskName); SaveTaskProgressToDB(queryObjectResult, taskName); return(queryObjectResult.Data); }
/// <summary> /// 插入数据到任务资源表 /// </summary> /// <param name="hwtask">任务对象</param> /// <param name="dnString">dn</param> private void InsertHWTaskResourceList(HWESightTask hwtask, string dnString) { string[] dns = dnString.Split(new char[] { ';' }); foreach (string dn in dns) { HWTaskResource hwResource = new HWTaskResource(); hwResource.HWESightTaskID = hwtask.ID; hwResource.DN = dn; hwResource.DeviceResult = ""; hwResource.DeviceProgress = 0; hwResource.ErrorDetail = ""; hwResource.TaskType = ConstMgr.HWESightTask.TASK_TYPE_DEPLOY; hwResource.SyncStatus = hwtask.SyncStatus; hwResource.LastModifyTime = System.DateTime.Now; hwResource.CreateTime = System.DateTime.Now; HWTaskResourceDal.Instance.InsertEntity(hwResource); } }
/// <summary> /// 添加部署任务 /// </summary> /// <param name="taskSourceName"></param> /// <param name="deployTask"></param> /// <returns>返回eSight任务名</returns> public string AddDeployTask(DeployPackageTask deployTask) { StringBuilder sb = new StringBuilder(ConstMgr.HWESightHost.URL_TASK_BASEPACKAGE); IList <KeyValuePair <string, object> > parameters = new List <KeyValuePair <string, object> >(); parameters.Add(new KeyValuePair <string, object>("basepackageName", deployTask.BasepackageName)); parameters.Add(new KeyValuePair <string, object>("firmwareList", deployTask.FirmwareList)); parameters.Add(new KeyValuePair <string, object>("dn", deployTask.DeviceDn)); parameters.Add(new KeyValuePair <string, object>("isforceupgrade", deployTask.IsForceUpgrade)); parameters.Add(new KeyValuePair <string, object>("effectiveMethod", deployTask.EffectiveMethod)); JObject jResult = ESSession.HCPostForm(sb.ToString(), parameters); CheckAndThrowException(jResult); HWESightTask eSightTask = new HWESightTask(); QueryObjectResult <JObject> queryObjectResult = jResult.ToObject <QueryObjectResult <JObject> >(); if (queryObjectResult.Code != 0) { throw GetDeployException(queryObjectResult.Code.ToString(), this, queryObjectResult.Description);//"添加部署任务出错:" + } else {//Save to database. eSightTask.HWESightHostID = this.ESSession.HWESightHost.ID; eSightTask.TaskName = JsonUtil.GetJObjectPropVal <string>(queryObjectResult.Data, "taskName"); eSightTask.SoftWareSourceName = deployTask.BasepackageName; eSightTask.TaskStatus = ConstMgr.HWESightTask.TASK_STATUS_RUNNING;//初始化。 eSightTask.TaskProgress = 0; eSightTask.TaskResult = ""; eSightTask.ErrorDetail = ""; eSightTask.SyncStatus = ConstMgr.HWESightTask.SYNC_STATUS_CREATED; eSightTask.TaskType = ConstMgr.HWESightTask.TASK_TYPE_DEPLOYFIRMWARE;//部署固件任务 eSightTask.DeviceIp = deployTask.DeviceDn; eSightTask.ReservedStr1 = deployTask.FirmwareList; eSightTask.LastModifyTime = System.DateTime.Now; eSightTask.CreateTime = System.DateTime.Now; int taskId = HWESightTaskDal.Instance.InsertEntity(eSightTask); eSightTask.ID = taskId; InsertHWTaskResourceList(eSightTask, deployTask.DeviceDn); LogUtil.HWLogger.API.InfoFormat("add task:{0}", taskId); } return(JsonUtil.GetJObjectPropVal <string>(queryObjectResult.Data, "taskName")); }
/// <summary> /// 上传固件任务。 /// </summary> /// <param name="basePackage"></param> /// <returns></returns> public string UploadBasePackage(BasePackage basePackage) { StringBuilder sb = new StringBuilder(ConstMgr.HWESightHost.URL_UPLOADE_BASEPACKAGE); int retCode = 0; JObject jResult = ESSession.HCPost(sb.ToString(), basePackage); CheckAndThrowException(jResult); HWESightTask eSightTask = HWESightTaskDal.Instance.FindTaskByBasepackageName(this.ESSession.HWESightHost.ID, basePackage.BasepackageName); if (eSightTask == null) { eSightTask = new HWESightTask(); } else { LogUtil.HWLogger.API.WarnFormat("Find same package name in the database, the data will be overwrite=[{0}]", basePackage.BasepackageName); } string taskName = ""; QueryObjectResult <JObject> queryObjectResult = jResult.ToObject <QueryObjectResult <JObject> >(); if (queryObjectResult.Code == 0) { taskName = JsonUtil.GetJObjectPropVal <string>(queryObjectResult.Data, "taskName"); //Save to database. eSightTask.HWESightHostID = this.ESSession.HWESightHost.ID; eSightTask.TaskName = taskName; eSightTask.SoftWareSourceName = basePackage.BasepackageName; eSightTask.ReservedStr1 = basePackage.BasepackageType; eSightTask.TaskStatus = ConstMgr.HWESightTask.TASK_STATUS_RUNNING;//初始化。 eSightTask.TaskProgress = 0; eSightTask.TaskResult = ""; eSightTask.ErrorDetail = ""; eSightTask.SyncStatus = ConstMgr.HWESightTask.SYNC_STATUS_CREATED; eSightTask.TaskType = ConstMgr.HWESightTask.TASK_TYPE_FIRMWARE; eSightTask.LastModifyTime = System.DateTime.Now; eSightTask.CreateTime = System.DateTime.Now; int taskId = HWESightTaskDal.Instance.InsertEntity(eSightTask); LogUtil.HWLogger.API.InfoFormat("add task:{0}", taskId); } return(taskName); }
public DeployPackageTaskDetail QueryDeployTaskProcess(string taskName) { StringBuilder sb = new StringBuilder(ConstMgr.HWESightHost.URL_TASK_PROGRESS_BASEPACKAGE); sb.Append("?taskName=").Append(HttpUtility.UrlEncode(taskName, Encoding.UTF8)); JObject jResult = ESSession.HCGet(sb.ToString()); CheckAndThrowException(jResult); QueryObjectResult <DeployPackageTaskDetail> queryObjectResult = jResult.ToObject <QueryObjectResult <DeployPackageTaskDetail> >(); //sync to the database. HWESightTask hwtask = HWESightTaskDal.Instance.FindTaskByName(this.ESSession.HWESightHost.ID, taskName); if (hwtask == null) { throw new BasePackageExpceion(ConstMgr.ErrorCode.DB_NOTFOUND, this, string.Format("Find task failed, system can't find this task.[{0}]", taskName)); } else { SaveDeployProgressToDB(queryObjectResult, taskName); } return(queryObjectResult.Data); }
/// <summary> /// 上传软件源,直接返回结果。 /// 不抛出错误 /// </summary> /// <param name="softwareSource">软件源参数</param> /// <returns>QueryObjectResult[taskname]</returns> public QueryObjectResult <JObject> UploadSoftwareSourceWithResult(SoftwareSource softwareSource) { StringBuilder sb = new StringBuilder(ConstMgr.HWESightHost.URL_UPLOADE_SOFTWARESOURCE); JObject jResult = ESSession.HCPost(sb.ToString(), softwareSource); //提交eSight服务器 CheckAndThrowException(jResult); //检测提交错误。 HWESightTask eSightTask = HWESightTaskDal.Instance.FindTaskBySourceName(this.ESSession.HWESightHost.ID, softwareSource.SoftwareName); if (eSightTask == null)//不是重复任务,创建任务对象。 { eSightTask = new HWESightTask(); } else//重复的任务。 { LogUtil.HWLogger.API.WarnFormat("Find same source in the database, the data will be overwite=[{0}]", softwareSource.SoftwareName); } string taskName = ""; //eSight返回的任务名。 QueryObjectResult <JObject> queryObjectResult = jResult.ToObject <QueryObjectResult <JObject> >(); //转换Json对象为期待的序列化对象。 if (queryObjectResult.Code == 0) //成功 { taskName = JsonUtil.GetJObjectPropVal <string>(queryObjectResult.Data, "taskName"); //Save to database. eSightTask.HWESightHostID = this.ESSession.HWESightHost.ID; eSightTask.TaskName = taskName; eSightTask.SoftWareSourceName = softwareSource.SoftwareName; eSightTask.TaskStatus = ConstMgr.HWESightTask.TASK_STATUS_RUNNING;//初始化。 eSightTask.TaskProgress = 0; eSightTask.TaskResult = ""; eSightTask.ErrorDetail = ""; eSightTask.SyncStatus = ConstMgr.HWESightTask.SYNC_STATUS_CREATED; eSightTask.TaskType = ConstMgr.HWESightTask.TASK_TYPE_SOFTWARE; eSightTask.LastModifyTime = System.DateTime.Now; eSightTask.CreateTime = System.DateTime.Now; int taskId = HWESightTaskDal.Instance.InsertEntity(eSightTask); LogUtil.HWLogger.API.InfoFormat("Add task:{0}", taskId); } return(queryObjectResult); }
private void SaveUploadProgressToDB(QueryObjectResult <BasePackageProgress> queryObjectResult, string taskName) { //sync to the database. BasePackageProgress basePackageProgess = queryObjectResult.Data; HWESightTask hwtask = HWESightTaskDal.Instance.FindTaskByName(this.ESSession.HWESightHost.ID, taskName); if (hwtask == null) { throw new BasePackageExpceion(ConstMgr.ErrorCode.DB_NOTFOUND, this, string.Format("Find upload package progress filed: System can not find this task in the database[{0}]", taskName)); } else { hwtask.TaskStatus = basePackageProgess.TaskStatus; hwtask.TaskProgress = basePackageProgess.TaskProgress; hwtask.TaskResult = basePackageProgess.TaskResult; hwtask.TaskCode = (!string.IsNullOrEmpty(basePackageProgess.TaskCode) && !string.Equals(basePackageProgess.TaskCode, "0"))? (errorPix + basePackageProgess.TaskCode):basePackageProgess.TaskCode; hwtask.ErrorDetail = basePackageProgess.ErrorDetail; hwtask.SyncStatus = GetTaskStatus(hwtask.SyncStatus, basePackageProgess.TaskStatus, basePackageProgess.TaskResult); hwtask.LastModifyTime = System.DateTime.Now; HWESightTaskDal.Instance.UpdateEntity(hwtask); } }
/// <summary> /// 查询部署任务状态,从eSight /// </summary> /// <param name="taskName">任务名称</param> /// <returns>部署任务明细对象</returns> private DeployProgress QueryDeployProcess(string taskName) { StringBuilder sb = new StringBuilder(ConstMgr.HWESightHost.URL_PROGRESS_DEPLOY); sb.Append("?taskName=").Append(HttpUtility.UrlEncode(taskName, Encoding.UTF8)); JObject jResult = ESSession.HCGet(sb.ToString()); CheckAndThrowException(jResult); QueryObjectResult <DeployProgress> queryObjectResult = jResult.ToObject <QueryObjectResult <DeployProgress> >(new JsonSerializer { NullValueHandling = NullValueHandling.Ignore }); //sync to the database. HWESightTask hwtask = HWESightTaskDal.Instance.FindTaskByName(this.ESSession.HWESightHost.ID, taskName); if (hwtask == null)//在数据库中没有找到,抛出错误。 { throw new DeployException(ConstMgr.ErrorCode.DB_NOTFOUND, this, string.Format("Query the deployWork failed:System can not find this task in db.[{0}]", taskName)); } else { SaveTaskProgressToDB(queryObjectResult, taskName); } return(queryObjectResult.Data); }
/// <summary> /// 更新任务资源表。 更新设备明细到数据库 /// </summary> /// <param name="hwtask">模板部署任务</param> /// <param name="deployProgress">部署任务明细</param> /// <returns>完成的设备数量</returns> private int UpdateHWTaskResourceList(HWESightTask hwtask, DeployProgress deployProgress) { bool isFinsihed = false; int finishedCnt = 0; IList <HWTaskResource> resourceList = HWTaskResourceDal.Instance.FindTaskResourceByTaskId(hwtask.ID); Dictionary <string, DeviceProgress> dviDict = new Dictionary <string, DeviceProgress>(); if (deployProgress.DeviceDetails == null) { return(0); } DeviceProgress emptyDevicProcess = null; foreach (DeviceProgress deviceProgress in deployProgress.DeviceDetails) { if (string.IsNullOrEmpty(deviceProgress.DeviceDn))//如果dn为空,设备关闭或者删除的时候。 { emptyDevicProcess = deviceProgress; } else { dviDict[deviceProgress.DeviceDn.ToUpper()] = deviceProgress; } } foreach (HWTaskResource hwResource in resourceList) { DeviceProgress deviceProgress = null; if (dviDict.ContainsKey(hwResource.DN.ToUpper())) { deviceProgress = dviDict[hwResource.DN.ToUpper()]; hwResource.DeviceResult = deviceProgress.DeviceResult; hwResource.DeviceProgress = deviceProgress.Progress; hwResource.ErrorCode = deviceProgress.ErrorCode; hwResource.ErrorDetail = deviceProgress.ErrorDetail; hwResource.TaskType = ConstMgr.HWESightTask.TASK_TYPE_DEPLOY; hwResource.SyncStatus = hwtask.SyncStatus; hwResource.LastModifyTime = System.DateTime.Now; if (deviceProgress.Progress == 100) { finishedCnt++; } } else { if (emptyDevicProcess != null) { LogUtil.HWLogger.API.WarnFormat("System can't find this dn=[{0}], using the none dn message.", hwResource.DN); hwResource.DeviceResult = emptyDevicProcess.DeviceResult; hwResource.DeviceProgress = emptyDevicProcess.Progress; hwResource.ErrorCode = emptyDevicProcess.ErrorCode; hwResource.ErrorDetail = emptyDevicProcess.ErrorDetail; hwResource.TaskType = ConstMgr.HWESightTask.TASK_TYPE_DEPLOY; hwResource.SyncStatus = hwtask.SyncStatus; hwResource.LastModifyTime = System.DateTime.Now; if (emptyDevicProcess.Progress == 100) { finishedCnt++; } } else { LogUtil.HWLogger.API.WarnFormat("System can't find this dn=[{0}]", hwResource.DN); } } HWTaskResourceDal.Instance.UpdateEntity(hwResource); } if (resourceList.Count > 0) { return((finishedCnt * 100) / resourceList.Count); } else { return(0); } }