public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { CswNbtResources.execStoredProc("update_nodecounts", new List <CswStoredProcParam>() { }); _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtNodeCounts::GetUpdatedItems() exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } //catch } //if we're not shutting down } //threadCallBack()
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { if (CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.CISPro)) { CswNbtResources.execStoredProc("TIER_II_DATA_MANAGER.SET_TIER_II_DATA", new List <CswStoredProcParam>()); _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; } } catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtTierII exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } } }
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { if (CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.Containers)) { processReconciliationActions(CswNbtResources); } _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; } catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtContainerReconciliationActions exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } } }
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { // Find which nodes are out of date CswArbitrarySelect OutOfDateNodesQuerySelect = getValuesToUpdate(CswNbtResources); DataTable OutOfDateNodes = null; Int32 NodesPerCycle = CswConvert.ToInt32(CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumConfigurationVariableNames.NodesProcessedPerCycle)); if (NodesPerCycle <= 0) { NodesPerCycle = 25; } OutOfDateNodes = OutOfDateNodesQuerySelect.getTable(0, NodesPerCycle, false); NodesPerCycle = OutOfDateNodes.Rows.Count; //in case we didn't actually retrieve that amount Int32 ErroneousNodeCount = 0; string ErroneousNodes = "The following Nodes failed to update:\n"; for (Int32 idx = 0; (idx < NodesPerCycle); idx++) { CswPrimaryKey nodeid = new CswPrimaryKey("nodes", CswConvert.ToInt32(OutOfDateNodes.Rows[idx]["nodeid"].ToString())); try//Case 29526 - if updating the node fails for whatever reason, log it and move on { CswNbtNode Node = CswNbtResources.Nodes[nodeid]; CswNbtActUpdatePropertyValue CswNbtActUpdatePropertyValue = new CswNbtActUpdatePropertyValue(CswNbtResources); CswNbtActUpdatePropertyValue.UpdateNode(Node, false); // Case 28997: Node.postChanges(ForceUpdate: true); } catch (Exception ex) { if (false == ErroneousNodes.Contains(CswConvert.ToString(nodeid))) { ErroneousNodeCount++; ErroneousNodes += nodeid + " - " + ex.Message + ex.StackTrace + "\n\n"; } } }//if we have nodes to process _CswScheduleLogicDetail.StatusMessage = 0 == ErroneousNodeCount ? "Completed without error" : ErroneousNodes; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line } catch (Exception Exception) { CswNbtResources.logError(Exception); _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtUpdtPropVals exception: " + Exception.Message + "; " + Exception.StackTrace; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed;//last line } }//if we're not shutting down }//threadCallBack()
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; //CswNbtResources.AuditContext = "Scheduler Task: Update MTBF"; CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { // BZ 6779 // Set all MTBF fields pendingupdate = 1 Int32 MTBFId = CswNbtResources.MetaData.getFieldType(ChemSW.Nbt.MetaData.CswEnumNbtFieldType.MTBF).FieldTypeId; CswTableSelect NTPSelect = CswNbtResources.makeCswTableSelect("UpdateMTBF_NTP_Select", "nodetype_props"); DataTable NTPTable = NTPSelect.getTable("fieldtypeid", MTBFId); string NTPIds = string.Empty; foreach (DataRow NTPRow in NTPTable.Rows) { if (NTPIds != string.Empty) { NTPIds += ","; } NTPIds += CswConvert.ToInt32(NTPRow["nodetypepropid"]); } if (NTPIds != string.Empty) { CswTableUpdate JNPUpdate = CswNbtResources.makeCswTableUpdate("UpdateMTBF_JNP_Update", "jct_nodes_props"); DataTable JNPTable = JNPUpdate.getTable("where nodetypepropid in (" + NTPIds + ")"); foreach (DataRow JNPRow in JNPTable.Rows) { JNPRow["pendingupdate"] = CswConvert.ToDbVal(true); } JNPUpdate.update(JNPTable); } _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtUpdtMTBF::GetUpdatedItems() exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } //catch } //if we're not shutting down } //threadCallBack()
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { CswNbtResources CswNbtResources = (CswNbtResources)CswResources; try { _InnerErrorMessage = string.Empty; CswResources.AuditContext = "Scheduler Task: " + RuleName; Int32 MailReportLimit = CswConvert.ToInt32(CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumConfigurationVariableNames.NodesProcessedPerCycle)); if (MailReportLimit < 1) { MailReportLimit = 1; } Int32 TotalMailReportsProcessed = 0; while (TotalMailReportsProcessed < MailReportLimit && _MailReportIdsToRun.Count > 0 && (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus)) { CswNbtObjClassMailReport MailReportNode = CswNbtResources.Nodes[_MailReportIdsToRun[0]]; if (null != MailReportNode) { Collection <Int32> RecipientIds = MailReportNode.Recipients.SelectedUserIds.ToIntCollection(); if (RecipientIds.Count > 0) { processMailReport(CswNbtResources, MailReportNode); MailReportNode.postChanges(false); } } _MailReportIdsToRun.RemoveAt(0); TotalMailReportsProcessed++; } if (false == String.IsNullOrEmpty(_InnerErrorMessage)) { _CswScheduleLogicDetail.StatusMessage = "The following errors occurred during processing: " + _InnerErrorMessage; } else { _CswScheduleLogicDetail.StatusMessage = "Completed without error"; } _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "An exception occurred: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } //catch } //if we're not shutting down } //threadCallBack()
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { if (_SyncModules.Any(SyncModule => CswNbtResources.Modules.IsModuleEnabled(SyncModule))) { // Check C3 Status CswC3Params CswC3Params = new CswC3Params(); CswNbtC3ClientManager CswNbtC3ClientManager = new CswNbtC3ClientManager(CswNbtResources, CswC3Params); SearchClient SearchClient = CswNbtC3ClientManager.initializeC3Client(); if (null != SearchClient) { int MaterialsProcessedPerIteration = CswConvert.ToInt32(CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumConfigurationVariableNames.NodesProcessedPerCycle)); int TotalProcessedThisIteration = 0; while (TotalProcessedThisIteration < MaterialsProcessedPerIteration && _MaterialPks.Count > 0 && (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus)) { CswNbtObjClassChemical MaterialNode = CswNbtResources.Nodes[_MaterialPks[0]]; if (null != MaterialNode) { _setPendingUpdate(CswNbtResources, CswConvert.ToString(MaterialNode.NodeId.PrimaryKey)); _MaterialPks.RemoveAt(0); TotalProcessedThisIteration++; } //if (null != MaterialNode) } } else { // TODO: What should we do with the error in the case of the schedule service? } } _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtExtChemDataSync exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } } }
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { if (CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.NBTManager)) { Collection <CswNbtObjClassCustomer> CustomersCollection = _getCustomers(CswNbtResources); foreach (CswNbtObjClassCustomer Customer in CustomersCollection) { //does a configuration for this customer's access id exist? if (false == CswNbtResources.CswDbCfgInfo.AccessIds.Contains(Customer.CompanyID.Text)) { //this access id doesn't exist, we must send an email string Subject = "Invalid Customer AccessID '" + Customer.CompanyID.Text + "' for schema '" + Customer.SchemaName + "'"; string Message = "On " + DateTime.Now.ToString() + ", the ValidateAccessIds schedule rule detected that the Access ID '" + Customer.CompanyID.Text + "' on schema '" + Customer.SchemaName + "' does not have an associated value in CswConfigUX."; CswNbtResources.sendSystemAlertEmail(Subject, Message); } //if false == AccessIDs.Contains( Customer.CompanyID.Text ) else { try { // case 30485 - set Schema Version too Customer.syncCustomerInfo(); Customer.postChanges(false); } catch (Exception ex) { // case 30485 - something is wrong with this access id string Subject = "Error synchronizing Customer AccessID '" + Customer.CompanyID.Text + "' for schema '" + Customer.SchemaName + "'"; string Message = "On " + DateTime.Now.ToString() + ", the ValidateAccessIds schedule rule encountered an exception while synchronizing: \n" + ex.Message + "\n" + ex.StackTrace; CswNbtResources.sendSystemAlertEmail(Subject, Message); } } }//foreach ( Customer in CustomersCollection ) _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; } //if ( IsModuleEnabled ( NBTManager ) ) } //if( Stopping != _LogicRunStatus ) } //threadCallBack()
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { Int32 ImportLimit = CswConvert.ToInt32(CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumConfigurationVariableNames.NodesProcessedPerCycle)); if (Int32.MinValue == ImportLimit) { ImportLimit = 10; // Default } if (_DataTableNames.Count > 0) { CswNbtImporter Importer = new CswNbtImporter(CswNbtResources.AccessId, CswEnumSetupMode.NbtExe); Int32 RowsProcessed; bool MoreToDo = Importer.ImportRows(ImportLimit, _DataTableNames[0], out RowsProcessed); if (false == MoreToDo) { _DataTableNames.RemoveAt(0); } Importer.Finish(); } else { _CswScheduleLogicDetail.LoadCount = 0; } _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtImport::threadCallBack() exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } //catch } //if we're not shutting down } //threadCallBack()
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { int nodesPerIteration = CswConvert.ToInt32(CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumConfigurationVariableNames.NodesProcessedPerCycle)); int molsProcessed = 0; while (molsProcessed < nodesPerIteration && _nodesToUpdate.Count > 0 && (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus)) { int NodeId = CswConvert.ToInt32(_nodesToUpdate[0]); CswPrimaryKey NodePK = new CswPrimaryKey("nodes", NodeId); if (CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.DirectStructureSearch)) { _generateCTab(CswNbtResources, NodePK); } else { _generateFingerprint(CswNbtResources, NodePK); } _nodesToUpdate.RemoveAt(0); molsProcessed++; } _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtMolFingerprints::GetUpdatedItems() exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } //catch } //if we're not shutting down } //threadCallBack()
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { CswNbtObjClassUser CswAdminAsUser = CswNbtResources.Nodes.makeUserNodeFromUsername(CswNbtObjClassUser.ChemSWAdminUsername); if (null != CswAdminAsUser) { if (false == CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.NBTManager)) { CswAdminAsUser.AccountLocked.Checked = CswEnumTristate.True; CswAdminAsUser.PasswordProperty.ChangedDate = DateTime.MinValue; } else { CswAdminAsUser.AccountLocked.Checked = CswEnumTristate.False; CswAdminAsUser.FailedLoginCount.Value = 0; CswAdminAsUser.PasswordProperty.Password = CswRandom.RandomString(); CswNbtResources.ConfigVbls.setConfigVariableValue(CswEnumNbtConfigurationVariables.password_length.ToString(), "16"); CswNbtResources.ConfigVbls.setConfigVariableValue(CswEnumNbtConfigurationVariables.passwordexpiry_days.ToString(), "30"); } CswAdminAsUser.postChanges(ForceUpdate: true); } _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtDisableCswAdmin::GetUpdatedItems() exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } //catch } //if we're not shutting down } //threadCallBack()
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; _CswScheduleLogicNodes = new CswScheduleLogicNodes(CswNbtResources); CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { Int32 TotalProcessed = 0; string Names = string.Empty; Collection <CswNbtObjClassInspectionDesign> InspectionDesigns = _CswScheduleLogicNodes.getInspectonDesigns(); for (Int32 idx = 0; (idx < InspectionDesigns.Count) && (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus); idx++) { CswNbtObjClassInspectionDesign CurrentInspectionDesign = InspectionDesigns[idx]; CurrentInspectionDesign.Status.Value = _Overdue; CurrentInspectionDesign.postChanges(ForceUpdate: true); TotalProcessed++; Names += CurrentInspectionDesign.Name + "; "; } _CswScheduleLogicDetail.StatusMessage = TotalProcessed.ToString() + " inspections processed: " + Names; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtUpdtInspection::threadCallBack() exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } //catch } //if we're not shutting down _CswScheduleLogicDetail.StatusMessage = "Completed without error"; }//threadCallBack()
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources _CswNbtResources = (CswNbtResources)CswResources; _CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { if (_CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.Containers)) { int ContainersProcessedPerIteration = CswConvert.ToInt32(_CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumConfigurationVariableNames.NodesProcessedPerCycle)); int TotalProcessedThisIteration = 0; while (TotalProcessedThisIteration < ContainersProcessedPerIteration && _ContainerIdsWithoutReceiveTransactions.Count > 0 && (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus)) { _createReceiveDispenseTransaction(_CswNbtResources, _ContainerIdsWithoutReceiveTransactions[0], _ContainerHasOtherTransactions[0]); CswNbtObjClassContainer expiredContainer = _CswNbtResources.Nodes[_ContainerIdsWithoutReceiveTransactions[0]]; if (null != expiredContainer) { expiredContainer.Status.Value = CswEnumNbtContainerStatuses.Expired; expiredContainer.postChanges(false); } _ContainerIdsWithoutReceiveTransactions.RemoveAt(0); TotalProcessedThisIteration++; } } _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; } catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicExpiredContainers::GetExpiredContainers() exception: " + Exception.Message + "; " + Exception.StackTrace; _CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } } }
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { processUpdateEvents(CswNbtResources); _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _CswScheduleLogicDetail.StatusMessage = 0 == _ErroneousNodeCount ? "Completed without error" : _ErroneousNodes; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; } catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtNodeUpdateEvents exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } } }
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CswNbtResources = (CswNbtResources)CswResources; CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; _CswScheduleLogicNodes = new CswScheduleLogicNodes(CswNbtResources); try { Int32 GeneratorLimit = CswConvert.ToInt32(CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumNbtConfigurationVariables.generatorlimit.ToString())); if (Int32.MinValue == GeneratorLimit) { GeneratorLimit = 1; } Int32 GeneratorsProcessed = 0; while (GeneratorsProcessed < GeneratorLimit && _GeneratorPks.Count > 0 && (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus)) { _processGenerator(CswNbtResources, CswNbtResources.Nodes[_GeneratorPks[0]]); GeneratorsProcessed++; _GeneratorPks.RemoveAt(0); } _TotalGeneratorsProcessed += GeneratorsProcessed; _CswScheduleLogicDetail.StatusMessage = _TotalGeneratorsProcessed.ToString() + " generators processed: " + _StatusMessage; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line } catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtGenNode::GetUpdatedItems() exception: " + Exception.Message + "; " + Exception.StackTrace; CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } }//threadCallBack()
public void reset() { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Idle; }
} //threadCallBack() public void stop() { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Stopping; }
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources CurrentSchemaResources = (CswNbtResources)CswResources; CurrentSchemaResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { if (null == _MasterSchemaResources) { _MasterSchemaResources = _getMasterSchemaResources((CswNbtResources)CswResources); } if (null != _MasterSchemaResources) { if (_StaleDataExists) { //The higher level classes that CswSessions is used require http reponse and request objects, //so we have to use th bare CswSessions class directly. CswSessionsFactory CswSessionsFactory = new CswSessionsFactory(CswEnumAppType.Nbt, _MasterSchemaResources.SetupVbls, _MasterSchemaResources.CswDbCfgInfo, _MasterSchemaResources.CswLogger); CswSessions CswSessions = CswSessionsFactory.make(CswEnumSessionsStorageType.DbStorage, _MasterSchemaResources); //We must get and delete the session data from the master schema, //but delete expired temp nodes from the current schema CswTableSelect SessionListSelect = _MasterSchemaResources.makeCswTableSelect("delete_expired_sessionlist_records", "sessionlist"); DataTable SessionListTable = SessionListSelect.getTable(_SessionListWhere(CurrentSchemaResources.AccessId)); CswNbtSessionDataMgr CswNbtSessionDataMgr = new CswNbtSessionDataMgr(CurrentSchemaResources); foreach (DataRow CurrentRow in SessionListTable.Rows) { //Step # 1: Remove stranded temp nodes in the _current_ schema using session id we got from master schema session list string CurrentSessionId = CurrentRow["sessionid"].ToString(); CswNbtSessionDataMgr.removeAllSessionData(CurrentSessionId); //Step # 2: Remove Session Record from master schema //If our session management code were organized differently, we would be calling //CswSessionManager::clearSession() instead of rolloing our own here. In the future //CswSessionManager::clearSession() could acquire functionality that we would miss. //Moreover, it calls an OnDeathenticate() event that is passsed in from //CswSessionResourcesNbt. Using the aforementioned chain of classes here would be //problematic because of said classes deep-endencies on, for example, various http //classes. So, if we add something in one place that the other place should also be //doing, we'll have to add it manually. CswSessionsListEntry CswSessionsListEntry = new CswSessionsListEntry(CurrentSessionId); CswSessions.remove(CswSessionsListEntry); } //iterate session records //Case 30266 - remove all rows in the current schema's session_data with no corresponding session id in the master schema's SessionList CswTableUpdate DoomedSessionDataTU = CurrentSchemaResources.makeCswTableUpdate("purge_doomed_session_data", "session_data"); DataTable DoomedSessionDataDT = DoomedSessionDataTU.getTable(_getMasterSessionIdsWhere()); foreach (DataRow DoomedRow in DoomedSessionDataDT.Rows) { DoomedRow.Delete(); } DoomedSessionDataTU.update(DoomedSessionDataDT); //case 31415 - there are still temp nodes hanging around, this should kill anything with a sessionid that has previously expired CswArbitrarySelect SelectOrphanedNodes = CurrentSchemaResources.makeCswArbitrarySelect("orphaned_nodeids", "select nodeid from nodes n left outer join sessionlist s on n.sessionid=s.sessionid where istemp=1 and s.sessionid is null"); foreach (DataRow Row in SelectOrphanedNodes.getTable().Rows) { CswPrimaryKey NodeId = new CswPrimaryKey("nodes", CswConvert.ToInt32(Row["nodeid"])); if (CswTools.IsPrimaryKey(NodeId)) { CswNbtNode TempNode = CurrentSchemaResources.Nodes[NodeId]; if (null != TempNode) { TempNode.delete(true, true); } } } //for each node with an inactive sessionid } //_StaleDataExists _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line } else { CswResources.CswLogger.reportError(new CswDniException("Unable to process sessionlist records: The master schmea resource object is null")); } }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtPurgeSessionData exception: " + Exception.Message + "; " + Exception.StackTrace; CurrentSchemaResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; }//catch finally { _StaleDataExists = false; _MasterSchemaResources.release(); //These must be marked null so that they get garbage collected _MasterSchemaResources = null; } } //if we're not shutting down } //threadCallBack()
public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { CswNbtResources _CswNbtResources = (CswNbtResources)CswResources; try { const Int32 MaxRowsToProcessPerThread = 1000; //This number must not exceed the amount of importing we expect to be able to do in _CswScheduleLogicDetail.MaxRunTimeMs const Int32 MinNumberToProcess = 100; //CIS-53123 - we should process at least this many rows at a time (because committing is expensive) - this number must not exceed 1000 (because we're using an IN clause) Int32 NumberToProcess = CswConvert.ToInt32(_CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumConfigurationVariableNames.NodesProcessedPerCycle)); NumberToProcess = NumberToProcess < MinNumberToProcess ? MinNumberToProcess : NumberToProcess; Int32 NumberOfCommits = MaxRowsToProcessPerThread / NumberToProcess;//CIS-53123 - process MaxRowsToProcessPerThread rows per rule iteration, committing every NumberToProcess rows const string QueueTableName = "nbtimportqueue"; const string QueuePkName = "nbtimportqueueid"; for (int c = 0; c < NumberOfCommits; c++) { string Sql = "select nbtimportqueueid, state, itempk, pkcolumnname, sheetname, priority, importorder, tablename, coalesce(viewname, tablename) as sourcename, nodetypename from " + QueueTableName + "@" + CAFDbLink + " iq" + " join " + CswNbtImportTables.ImportDefOrder.TableName + " io on ( coalesce(viewname, tablename) = iq.sheetname )" //TODO - remove ignoring Delete rows when we support Importing deleted nodes + " where state != '" + State.E + "' and state != '" + State.D //Much faster than (I or U) + "' order by decode (state, '" + State.I + "', 1, '" + State.U + "', 2) asc, priority desc, importorder asc, nbtimportqueueid asc"; CswArbitrarySelect QueueSelect = _CswNbtResources.makeCswArbitrarySelect("cafimport_queue_select", Sql); DataTable QueueTable = QueueSelect.getTable(0, NumberToProcess, false); if (QueueTable.Rows.Count > 0) { Collection <String> ImportQueuePKs = new Collection <string>(); CswCommaDelimitedString ItemPKs = new CswCommaDelimitedString(); string ImportOrder = QueueTable.Rows[0]["importorder"].ToString(); DataRow QueueRowDef = QueueTable.Rows[0]; CswNbtImporter Importer = new CswNbtImporter(_CswNbtResources.AccessId, CswEnumSetupMode.NbtExe); foreach (DataRow QueueRow in QueueTable.Rows) { string CurrentTblNamePkCol = CswConvert.ToString(QueueRow["pkcolumnname"]); if (string.IsNullOrEmpty(CurrentTblNamePkCol)) { throw new Exception("Could not find pkcolumn in data_dictionary for table " + QueueRow["tablename"]); } if (QueueRow["importorder"].ToString() != ImportOrder) { break;//We've changed NodeTypes - we'll pick them up next time around } ImportQueuePKs.Add(QueueRow[QueuePkName].ToString()); ItemPKs.Add("'" + QueueRow["itempk"] + "'"); } string ItemSql = "select * from " + QueueRowDef["sourcename"] + "@" + CAFDbLink + " where " + QueueRowDef["pkcolumnname"] + " in(" + ItemPKs + ")"; CswArbitrarySelect ItemSelect = _CswNbtResources.makeCswArbitrarySelect("cafimport_queue_select", ItemSql); DataTable ItemTable = ItemSelect.getTable(); for (int i = 0; i < ItemTable.Rows.Count; i++) { DataRow ItemRow = ItemTable.Rows[i]; string NodetypeName = QueueRowDef["nodetypename"].ToString(); bool Overwrite = QueueRowDef["state"].ToString().Equals("U"); string Error = Importer.ImportRow(ItemRow, DefinitionName, NodetypeName, Overwrite); if (string.IsNullOrEmpty(Error)) { // record success - delete the record _CswNbtResources.execArbitraryPlatformNeutralSql("delete from " + QueueTableName + "@" + CAFDbLink + " where " + QueuePkName + " = " + ImportQueuePKs[i]); } else { // truncate error to 2000 chars string SafeError = CswTools.SafeSqlParam(Error); if (SafeError.Length > 2000) { SafeError = SafeError.Substring(0, 2000); } // record failure - record the error on nbtimportqueue _CswNbtResources.execArbitraryPlatformNeutralSql("update " + QueueTableName + "@" + CAFDbLink + " set state = '" + State.E + "', " + " errorlog = '" + SafeError + "' " + " where " + QueuePkName + " = " + ImportQueuePKs[i]); } _CswScheduleLogicDetail.LoadCount = _CswScheduleLogicDetail.LoadCount - 1; } Importer.Finish(); //CIS-53123 - Commit every NumberToProcess rows (performes better than spawning a new thread every NumberToProcess rows) _CswNbtResources.finalize(); } else { c = NumberOfCommits;//We're done importing! } } _CswScheduleLogicDetail.StatusMessage = "Completed without error"; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtCAFImport::ImportItems() exception: " + Exception.Message + "; " + Exception.StackTrace; _CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } //catch } //if we're not shutting down } //threadCallBack()
}//initScheduleLogicDetail() public void threadCallBack(ICswResources CswResources) { _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running; CswNbtResources _CswNbtResources = (CswNbtResources)CswResources; _CswNbtResources.AuditContext = "Scheduler Task: " + RuleName; if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus) { try { if (_CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.Containers)) { Int32 RequestsLimit = CswConvert.ToInt32(_CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumNbtConfigurationVariables.generatorlimit.ToString())); if (RequestsLimit <= 0) { RequestsLimit = 1; } CswNbtActRequesting ActRequesting = new CswNbtActRequesting(_CswNbtResources); CswNbtView AllRecurringRequests = ActRequesting.getDueRecurringRequestItemsView(); ICswNbtTree Tree = _CswNbtResources.Trees.getTreeFromView(AllRecurringRequests, RequireViewPermissions: false, IncludeSystemNodes: false, IncludeHiddenNodes: false); Int32 TotalRequestsProcessed = 0; string RequestDescriptions = string.Empty; Int32 TotatRequests = Tree.getChildNodeCount(); for (Int32 ChildN = 0; (ChildN < TotatRequests && TotalRequestsProcessed < RequestsLimit) && (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus); ChildN++) { string Description = ""; try { Tree.goToNthChild(ChildN); CswNbtObjClassRequestItem CurrentRequestItem = Tree.getNodeForCurrentPosition(); if (_doesRequestItemCopyNow(CurrentRequestItem)) { Description = CurrentRequestItem.Description.StaticText; CswNbtObjClassRequest RecurringRequest = _CswNbtResources.Nodes[CurrentRequestItem.Request.RelatedNodeId]; if (null != RecurringRequest) { CswNbtObjClassUser Requestor = _CswNbtResources.Nodes[RecurringRequest.Requestor.RelatedNodeId]; if (null != Requestor) { CswNbtObjClassRequestItem CopiedRequestItem = _CswNbtResources.Nodes.makeNodeFromNodeTypeId(CurrentRequestItem.NodeTypeId, delegate(CswNbtNode NewNode) { // We'd get all of this for free if we used copyNode, // but then we'd have to manually do as much work in the other direction: // un-hiding properties, etc. CswNbtActRequesting ThisUserAct = new CswNbtActRequesting(_CswNbtResources, Requestor); CswNbtObjClassRequest UsersCartNode = ThisUserAct.getCurrentRequestNode(); if (null != UsersCartNode) { CswNbtObjClassRequestItem NewRequestItem = NewNode; // Most importantly, put the new request item in the current cart NewRequestItem.Request.RelatedNodeId = UsersCartNode.NodeId; NewRequestItem.Requestor.RelatedNodeId = CurrentRequestItem.Requestor.RelatedNodeId; NewRequestItem.Material.RelatedNodeId = CurrentRequestItem.Material.RelatedNodeId; NewRequestItem.Material.CachedNodeName = CurrentRequestItem.Material.CachedNodeName; NewRequestItem.InventoryGroup.RelatedNodeId = CurrentRequestItem.InventoryGroup.RelatedNodeId; NewRequestItem.Location.SelectedNodeId = CurrentRequestItem.Location.SelectedNodeId; NewRequestItem.Location.CachedPath = CurrentRequestItem.Location.CachedPath; NewRequestItem.Comments.CommentsJson = CurrentRequestItem.Comments.CommentsJson; NewRequestItem.Type.Value = CurrentRequestItem.Type.Value; if (CurrentRequestItem.Type.Value == CswNbtObjClassRequestItem.Types.MaterialSize) { NewRequestItem.Size.RelatedNodeId = CurrentRequestItem.Size.RelatedNodeId; NewRequestItem.Size.CachedNodeName = CurrentRequestItem.Size.CachedNodeName; NewRequestItem.SizeCount.Value = CurrentRequestItem.SizeCount.Value; } else { NewRequestItem.Quantity.Quantity = CurrentRequestItem.Quantity.Quantity; NewRequestItem.Quantity.CachedUnitName = CurrentRequestItem.Quantity.CachedUnitName; NewRequestItem.Quantity.UnitId = CurrentRequestItem.Quantity.UnitId; } NewRequestItem.Status.Value = CswNbtObjClassRequestItem.Statuses.Pending; NewRequestItem.postChanges(ForceUpdate: false); CurrentRequestItem.NextReorderDate.DateTimeValue = CswNbtPropertySetSchedulerImpl.getNextDueDate(CurrentRequestItem.Node, CurrentRequestItem.NextReorderDate, CurrentRequestItem.RecurringFrequency, ForceUpdate: true); CurrentRequestItem.postChanges(ForceUpdate: false); } }); } RequestDescriptions += CurrentRequestItem.Description + "; "; } } Tree.goToParentNode(); } // if ~( not null, is recurring and is due) catch (Exception Exception) { string Message = "Unable to create recurring request " + Description + ", due to the following exception: " + Exception.Message; RequestDescriptions += Message; _CswNbtResources.logError(new CswDniException(Message)); } //catch finally { TotalRequestsProcessed += 1; } } //iterate requests string StatusMessage = "No Recurring Requests found to process"; if (TotalRequestsProcessed > 0) { StatusMessage = TotalRequestsProcessed.ToString() + " requests processed: " + RequestDescriptions; } _CswScheduleLogicDetail.StatusMessage = StatusMessage; _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line } }//try catch (Exception Exception) { _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtGenRequests::threadCallBack() exception: " + Exception.Message + "; " + Exception.StackTrace; _CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage)); _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed; } //catch } //if we're not shutting down } //threadCallBack()