Ejemplo n.º 1
0
        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()
Ejemplo n.º 7
0
        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;
                }
            }
        }
Ejemplo n.º 8
0
        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()
Ejemplo n.º 10
0
        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()
Ejemplo n.º 11
0
        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()
Ejemplo n.º 12
0
        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;
                }
            }
        }
Ejemplo n.º 14
0
        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()