/// <summary>
        /// Populate the Schema and Operation filters
        /// </summary>
        private static void _populateFilterData(CswNbtResources NbtResources, CswNbtSchedServiceTimeLineReturn Return, String OpName, String Schema, HashSet <string> seen)
        {
            if (_checkNbtManagerPermission(NbtResources) || Schema == NbtResources.AccessId)
            {
                FilterData.FilterOption opOpt = new FilterData.FilterOption()
                {
                    text  = OpName,
                    value = OpName
                };
                if (false == seen.Contains(OpName))
                {
                    Return.Data.FilterData.Operations.Add(opOpt);
                    seen.Add(OpName);
                }

                FilterData.FilterOption schemaOpt = new FilterData.FilterOption()
                {
                    text  = Schema,
                    value = Schema
                };
                if (false == seen.Contains(Schema))
                {
                    Return.Data.FilterData.Schema.Add(schemaOpt);
                    seen.Add(Schema);
                }
            }
        }
        }//getTimelines()

        private static void _getLogFiles(CswNbtResources NbtResources, CswNbtSchedServiceTimeLineReturn Return, string LogFileLocation)
        {
            List <string> logFiles = new List <string>(Directory.GetFiles(LogFileLocation));

            //Add files to collection by most recent
            while (logFiles.Count > 0)
            {
                DateTime newestLogFileDate = DateTime.MinValue;
                string   newestLogFile     = string.Empty;
                foreach (string fileName in logFiles)
                {
                    DateTime lastModified = File.GetLastWriteTime(fileName);
                    if (lastModified >= newestLogFileDate)
                    {
                        newestLogFile     = fileName;
                        newestLogFileDate = lastModified;
                    }
                }
                logFiles.Remove(newestLogFile);
                string newestFileNameWithoutPath = Path.GetFileName(newestLogFile);
                if (false == _inUse(newestLogFile))
                {
                    Return.Data.FilterData.LogFiles.Add(newestFileNameWithoutPath);
                }
            }
        }
        public static void getTimelineFilters(ICswResources CswResources, CswNbtSchedServiceTimeLineReturn Return, string FileName)
        {
            CswNbtResources NbtResources = (CswNbtResources)CswResources;

            HashSet <string> Seen = new HashSet <string>();

            string LogFileLocation = NbtResources.SetupVbls[CswEnumSetupVariableNames.LogFileLocation];

            _getLogFiles(NbtResources, Return, LogFileLocation);   //Order the log files by last modified date

            string selectedFile = "";

            if (Return.Data.FilterData.LogFiles.Count > 0)
            {
                selectedFile = Return.Data.FilterData.LogFiles[0];
            }
            foreach (string log in Return.Data.FilterData.LogFiles)
            {
                if (log.Equals(FileName))
                {
                    selectedFile = log;
                }
            }

            if (false == string.IsNullOrEmpty(selectedFile))
            {
                string       filePath = LogFileLocation + @"\" + selectedFile;
                StreamReader file     = new StreamReader(filePath);
                string       line;
                while ((line = file.ReadLine()) != null)
                {
                    line = line.Replace("\"", "");
                    string[] splitLine = line.Split(',');
                    string   MsgType   = splitLine[0];

                    if ((MsgType.Equals("PerOp") || MsgType.Equals("Error")))        //We only care about "Error" or "PerOp" rows
                    {
                        string Schema = splitLine[1];
                        string OpName = splitLine[23].Split(':')[0];         //this is something like "GenNode: Execution" and all we want is "GenNode"
                        OpName = MsgType.Equals("Error") ? "Error" : OpName; //If we have an "error" row, the Op gets renamed to "Error"

                        _populateFilterData(NbtResources, Return, OpName, Schema, Seen);

                        DateTime ThirtyMinAgo = DateTime.Now.AddMinutes(-30);   //30 min ago
                        Return.Data.FilterData.DefaultStartTime = ThirtyMinAgo.ToString("hh:mm:ss tt");
                        Return.Data.FilterData.DefaultEndTime   = DateTime.Now.ToString("hh:mm:ss tt");

                        Return.Data.FilterData.DefaultStartDay = DateTime.Now.ToString("M/d/yyyy");
                        Return.Data.FilterData.DefaultEndDay   = DateTime.Now.ToString("M/d/yyyy");
                    }
                }
            }
        }
Ejemplo n.º 4
0
        public CswNbtSchedServiceTimeLineReturn getTimelineFilters(string FileName)
        {
            CswNbtSchedServiceTimeLineReturn Ret = new CswNbtSchedServiceTimeLineReturn();
            var SvcDriver = new CswWebSvcDriver <CswNbtSchedServiceTimeLineReturn, string>(
                CswWebSvcResourceInitializer: new CswWebSvcResourceInitializerNbt(_Context, null),
                ReturnObj: Ret,
                WebSvcMethodPtr: CswNbtWebServiceNbtManager.getTimelineFilters,
                ParamObj: FileName
                );

            SvcDriver.run();

            return(Ret);
        }//getTimeline
Ejemplo n.º 5
0
        public CswNbtSchedServiceTimeLineReturn getTimeline(CswNbtSchedServiceTimeLineRequest Request)
        {
            CswNbtSchedServiceTimeLineReturn Ret = new CswNbtSchedServiceTimeLineReturn();
            var SvcDriver = new CswWebSvcDriver <CswNbtSchedServiceTimeLineReturn, CswNbtSchedServiceTimeLineRequest>(
                CswWebSvcResourceInitializer: new CswWebSvcResourceInitializerNbt(_Context, null),
                ReturnObj: Ret,
                WebSvcMethodPtr: CswNbtWebServiceNbtManager.getTimelines,
                ParamObj: Request
                );

            SvcDriver.run();

            return(Ret);
        }//getTimeline
        public static void getTimelines(ICswResources CswResources, CswNbtSchedServiceTimeLineReturn Return, CswNbtSchedServiceTimeLineRequest Request)
        {
            CswNbtResources NbtResources = (CswNbtResources)CswResources;

            DateTime StartDate = new DateTime();
            int      counter   = 0;

            CswColorGenerator ColorGenerator = new CswColorGenerator();

            int SeriesNo = 30;

            Dictionary <string, Series> TimeLineData = new Dictionary <string, Series>();
            HashSet <string>            seen         = new HashSet <string>();

            string LogFileLocation = NbtResources.SetupVbls[CswEnumSetupVariableNames.LogFileLocation];

            _getLogFiles(NbtResources, Return, LogFileLocation);   //Order the log files by last modified date

            //Case 30403 - if the current user is not ChemSW_Admin, scope timeline to the users schema
            if (NbtResources.CurrentNbtUser.Username != CswAuthenticator.ChemSWAdminUsername)
            {
                Request.FilterSchemaTo = NbtResources.AccessId;
            }

            if (Return.Data.FilterData.LogFiles.Count > 0)
            {
                //If no log file is selected, default to the last log file modified
                string       selectedFile = String.IsNullOrEmpty(Request.SelectedLogFile) ? Return.Data.FilterData.LogFiles[0] : Request.SelectedLogFile;
                StreamReader file         = new StreamReader(LogFileLocation + @"\" + selectedFile);
                string       line;
                while ((line = file.ReadLine()) != null)
                {
                    line = line.Replace("\"", "");
                    string[] splitLine = line.Split(',');
                    string   MsgType   = splitLine[0];

                    if ((MsgType.Equals("PerOp") || MsgType.Equals("Error")))
                    {
                        string Schema        = splitLine[1];
                        string StartTime     = splitLine[20];
                        string OpName        = splitLine[23].Split(':')[0]; //this is something like "GenNode: Execution" and all we want is "GenNode"
                        double ExecutionTime = CswConvert.ToDouble(splitLine[28]);
                        string ErrMsg        = splitLine[9];

                        if (MsgType.Equals("Error"))
                        {
                            OpName        = "Error";
                            ExecutionTime = double.MinValue;
                        }
                        string LegendName = Schema + " " + OpName;

                        _populateFilterData(NbtResources, Return, OpName, Schema, seen);

                        DateTime thisStartDate = CswConvert.ToDateTime(StartTime);

                        DateTime FilterDateStart = CswConvert.ToDateTime(Request.FilterStartTimeTo);
                        DateTime FilterDateEnd   = CswConvert.ToDateTime(Request.FilterEndTimeTo);
                        CswCommaDelimitedString FilterSchemas = new CswCommaDelimitedString();
                        FilterSchemas.FromString(Request.FilterSchemaTo);
                        CswCommaDelimitedString FilterOps = new CswCommaDelimitedString();
                        FilterOps.FromString(Request.FilterOpTo);

                        if (((thisStartDate >= FilterDateStart && thisStartDate <= FilterDateEnd) || (DateTime.MinValue == FilterDateStart && DateTime.MinValue == FilterDateEnd)) &&
                            (FilterSchemas.Contains(Schema) || String.IsNullOrEmpty(Request.FilterSchemaTo)) &&
                            (FilterOps.Contains(OpName) || String.IsNullOrEmpty(Request.FilterOpTo)))
                        {
                            if (FilterSchemas.IsEmpty || FilterOps.IsEmpty)  //If no schema filter is set we want to generate a timeline of each schema + all the rules that ran
                            {
                                if (FilterOps.IsEmpty)
                                {
                                    if (MsgType.Equals("Error"))
                                    {
                                        //If we're mashing all schema errors together, we do not show what the msg or schema was was since there are probably many, just that an error occured.
                                        LegendName = "Error";
                                        OpName     = "";
                                        ErrMsg     = "";
                                        Schema     = "";
                                    }
                                    else
                                    {
                                        //If we're mashing all schema together, we don't care what op ran since there are many, just show that this schema was running something
                                        LegendName = Schema;
                                        OpName     = "";
                                    }
                                }
                                else
                                {
                                    //If no schema is selected, but there are Op filters, we mash the Ops on each Schema together
                                    LegendName = OpName;
                                    Schema     = "";
                                }
                            }

                            if (0 == counter)
                            {
                                StartDate = CswConvert.ToDateTime(StartTime);
                            }
                            counter++;

                            double DataStartS = (thisStartDate - StartDate).TotalMilliseconds / 1000;
                            double DataEndS   = double.MinValue;
                            if (MsgType.Equals("PerOp"))
                            {
                                DataEndS = DataStartS + ExecutionTime / 1000;
                            }

                            Series ThisSeries;
                            if (TimeLineData.ContainsKey(LegendName))
                            {
                                ThisSeries = TimeLineData[LegendName];
                            }
                            else
                            {
                                ThisSeries = new Series()
                                {
                                    label      = LegendName,
                                    SchemaName = Schema,
                                    OpName     = OpName,
                                    SeriesNo   = SeriesNo,
                                    ErrorMsg   = ErrMsg
                                };
                                TimeLineData.Add(LegendName, ThisSeries);
                                SeriesNo += 90;
                            }
                            _processData(ThisSeries, DataStartS, DataEndS, ExecutionTime, thisStartDate.ToString(), ColorGenerator);
                        }
                    } //if( splitLine.Length >= 28 && splitLine[0].Equals( "PerOp" ) )
                }     // while( ( line = file.ReadLine() ) != null && counter <= maxLines )

                foreach (Series series in TimeLineData.Values)
                {
                    Return.Data.Series.Add(series);
                }
            }
        }//getTimelines()