/// <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"); } } } }
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
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()