protected override void OnStart(string[] args) { JLogger.LogInfo(this, "OnStart() Start"); base.OnStart(args); _host?.Close(); try { JLogger.LogDebug(this, "Se crea el service host con la direccion base."); var baseAddress = new Uri("http://localhost:8080/CommandService"); _host = new ServiceHost(typeof(CommandService), baseAddress); JLogger.LogDebug(this, "Se configura para presentar el metadata."); var smb = new ServiceMetadataBehavior { HttpGetEnabled = true, MetadataExporter = { PolicyVersion = PolicyVersion.Policy15 } }; _host.Description.Behaviors.Add(smb); JLogger.LogDebug(this, "Se Abre la comunicacion."); _host.Open(); } catch (Exception ex) { JLogger.LogError(this, "Error al crear el host.", ex); } JLogger.LogInfo(this, "OnStart() End"); }
public CommandResponse[] ExecuteCommand(CommandRequest req) { JLogger.LogInfo(this, "ExecuteCommand:{0}", req.ToString()); CommandResponse[] resp; try { var cmd = GetCommand(req.ServiceName, req.ServiceCommand); if (cmd != null) { resp = (CommandResponse[])cmd.RunCommand(req); } else { resp = new[] { new CommandResponse(CommandResponseCodes.ErrorCommandNotFound[0], CommandResponseCodes.ErrorCommandNotFound[1]) }; } } catch (Exception ex) { resp = new[] { new CommandResponse(CommandResponseCodes.ErrorExceptionFound[0], CommandResponseCodes.ErrorExceptionFound[1] + ex.Message) }; } return(resp); }
public void InternalLogging() { bool insideCallback = false; string internalMessage = null; LogLevel internalLevel = LogLevel.Trace; var sink = new Mock <ISink>(); sink.Setup(s => s.Emit(It.IsAny <string>(), Enums.LogLevel.Info)) .Throws <NullReferenceException>(); sink.Setup(s => s.Emit(It.IsAny <string>(), LogLevel.Critical)) .Callback((string msg, LogLevel level) => { insideCallback = true; internalMessage = msg; internalLevel = level; }); var logger = new JLogger(sink.Object, new EntryFormatter(new DataFormatter())); logger.Log("test"); Assert.True(insideCallback); Assert.Equal(LogLevel.Critical, internalLevel); Assert.Contains("StackTrace", internalMessage); Assert.Contains("Failed to log entry", internalMessage); }
private void LoadWatchers() { JLogger.LogInfo(this, "LoadWatchers()"); var watchers = Directory.EnumerateFiles(SRMAgentPaths.SRMComponents, "*.dll").ToList(); foreach (var watcher in watchers) { JLogger.LogDebug(this, "Component found: {0}", watcher); try { JLogger.LogDebug(this, "Loading assembly from file"); var ptrAssembly = Assembly.LoadFile(watcher); foreach (var item in ptrAssembly.GetTypes()) { if (!item.IsClass) { continue; } JLogger.LogDebug(this, "Filter for correct interface"); if (item.GetInterfaces().Contains(typeof(IFactWatcher))) { var inst = (IFactWatcher)Activator.CreateInstance(item); _watchers.Add(inst); JLogger.LogDebug(this, "Watcher '{0}' added to list", inst.GetFactWatcherName()); } } } catch (Exception ex) { JLogger.LogError(this, "LoadWatchers() Exception found: {0}", ex.Message); } } }
// private void OnEntryWritten(object source, EntryWrittenEventArgs e) { JLogger.LogInfo(this, "OnEntryWritten() eventId:{0}", e.Entry.Index); //ALL THE EVENT LOGS CAN FIRE THIS EVENT HANDLER SO WE NEED TO //GET EVENTLOG NAME FROM EVENTLOG SOURCE (DIRTY WAY) var eventLogName = (string)source.GetType().GetProperty("Log").GetValue(source, null); var fieldSeparator = (char)28; var sbFactMessage = new StringBuilder(); sbFactMessage.AppendFormat("{0}{1}{2}{3}{4}{5}{6}{7}{8}", eventLogName, fieldSeparator, e.Entry.Index, fieldSeparator, e.Entry.Source, fieldSeparator, e.Entry.TimeGenerated, fieldSeparator, e.Entry.Message); //FIRE NEW EVENT JLogger.LogInfo(this, "Firing the event"); OnNewFact?.Invoke(this, new FactWatcherEventArgs(GetFactWatcherName(), e.Entry.TimeGenerated, sbFactMessage.ToString())); //SAVE LOG FACTS JLogger.LogDebug(this, "Validate if is configured fact file"); if (!string.IsNullOrEmpty(_savedFactFileName)) { SaveFactToLog(sbFactMessage.ToString()); } //STORE THE LATEST INDEX PROCESSED Persistence.SetValueByKey("LAST_ENTRY_INDEX", e.Entry.Index.ToString()); Persistence.SetValueByKey("LAST_ENTRY_DATETIME", e.Entry.TimeGenerated.ToString(CultureInfo.InvariantCulture)); //Persistence.Save(); }
private void OnNewFactProcess(object sender, EventArgs e) { JLogger.LogInfo(this, "OnNewFactProcess()"); var ea = (FactWatcherEventArgs)e; var sbFactMessage = new StringBuilder(); sbFactMessage.AppendFormat("{0}-{1}-{2}", DateTime.Now.ToString("yyyyMMddHHmmssff", CultureInfo.InvariantCulture), ea.FactWatcherName, ea.FactData); //string factFileName = _factStorePath + DateTime.Now.ToString("yyyyMMddHHmmssffff", CultureInfo.InvariantCulture) + "-" + // ea.FactDatetime.ToString("yyyyMMddHHmmssffff", CultureInfo.InvariantCulture) + ".log"; //JLogger.LogDebug(this, "Opening {0} file to write", factFileName); //using (var factFile = File.Open(factFileName, FileMode.CreateNew, FileAccess.Write)) //{ // JLogger.LogDebug(this, "Writing to file", factFileName); // factFile.Write(Encoding.ASCII.GetBytes(sbFactMessage.ToString()), 0, sbFactMessage.Length); //} _serverAccess.ProcessFact(new Fact() { MachineId = 0, AgentTimestamp = DateTime.Now.ToString("yyyyMMddHHmmssff", CultureInfo.InvariantCulture), Watcher = ea.FactWatcherName, Datetime = ea.FactDatetime.ToString("yyyyMMddHHmmssff", CultureInfo.InvariantCulture), Data = ea.FactData }); SaveFactToLog(ea.FactWatcherName, ea.FactData); }
public void Start() { JLogger.LogInfo(this, "Start()"); int count = 0; int sleepTime; int.TryParse(Config.GetValueByKey("BEAT_TIME_MS"), out sleepTime); _cts = new CancellationTokenSource(); var token = _cts.Token; Task.Factory.StartNew(() => { while (true) { if (token.IsCancellationRequested) { break; } //DO YOUR WORK Thread.Sleep(sleepTime); OnNewFact?.Invoke(this, new FactWatcherEventArgs(GetFactWatcherName(), DateTime.Now, "BEAT" + count)); count++; } }, token, TaskCreationOptions.LongRunning, TaskScheduler.Default); }
private void SaveFactToLog(string watcherName, string message) { JLogger.LogInfo(this, "SaveFactToLog()"); var sbFactMessage = new StringBuilder(); sbFactMessage.AppendFormat("{0}-{1}-{2}{3}", DateTime.Now.ToString("yyyyMMddHHmmssff", CultureInfo.InvariantCulture), watcherName, message.Replace(Environment.NewLine, " ").Replace('\r', ' '), Environment.NewLine); JLogger.LogDebug(this, "validate if it is configured log file {0}", _savedFactFileName); if (!string.IsNullOrEmpty(_savedFactFileName)) { lock (_objectLock) { JLogger.LogDebug(this, "Opening {0} file to write", _savedFactFileName); using (var factFile = File.Open(SRMAgentPaths.SRMData + _savedFactFileName, FileMode.Append, FileAccess.Write)) { JLogger.LogDebug(this, "Writing to file", _savedFactFileName); factFile.Write(Encoding.ASCII.GetBytes(sbFactMessage.ToString()), 0, sbFactMessage.Length); } } } //PRINT TO CONSOLE if (!string.IsNullOrEmpty(Config.GetValueByKey("TO_CONSOLE"))) { Console.WriteLine(sbFactMessage.ToString()); } }
protected override void OnCustomCommand(int command) { JLogger.LogInfo(this, "OnCustomCommand() Start"); // A custom command can be sent to a service by using this method: //# int command = 128; //Some Arbitrary number between 128 & 256 //# ServiceController sc = new ServiceController("NameOfService"); //# sc.ExecuteCommand(command); base.OnCustomCommand(command); JLogger.LogInfo(this, "OnCustomCommand() End"); }
public void Stop() { JLogger.LogInfo(this, "Stop()"); //CLOSE ALL THE EVENT LOGS FILES OPENED foreach (var eventLog in _eventLogs) { JLogger.LogDebug(this, "Stoping {0} eventlog", eventLog.LogDisplayName); eventLog.EnableRaisingEvents = false; eventLog.Close(); } }
protected override void OnStop() { JLogger.LogInfo(this, "OnStop() Start"); base.OnStop(); if (_wl != null) { _wl.StopWatchers(); _wl = null; } JLogger.LogInfo(this, "OnStop() End"); }
public void StopWatchers() { JLogger.LogInfo(this, "StoptWatchers()"); foreach (var watcher in _watchers) { JLogger.LogDebug(this, "Stoping Watcher '{0}'", watcher.GetFactWatcherName()); watcher.Stop(); JLogger.LogDebug(this, "Disattached 'OnNewFactProcess' to Watcher '{0}'", watcher.GetFactWatcherName()); watcher.OnNewFact -= OnNewFactProcess; } }
public void StartWatchers() { JLogger.LogInfo(this, "StartWatchers()"); foreach (var watcher in _watchers) { JLogger.LogDebug(this, "Attached 'OnNewFactProcess' to Watcher '{0}'", watcher.GetFactWatcherName()); watcher.OnNewFact += OnNewFactProcess; JLogger.LogDebug(this, "Starting Watcher '{0}'", watcher.GetFactWatcherName()); watcher.Start(); } }
protected override void OnStop() { JLogger.LogInfo(this, "OnStop() Start"); base.OnStop(); if (_host != null) { _host.Close(); _host = null; } JLogger.LogInfo(this, "OnStop() End"); }
protected override void OnStart(string[] args) { JLogger.LogInfo(this, "OnStart() Start"); if (_wl == null) { _wl = new WatcherLoader(); } _wl.StartWatchers(); JLogger.LogInfo(this, "OnStart() End"); }
//private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); /// <summary> /// The main entry point for the application. /// </summary> private static void Main() { JLogger.LogInfo(null, "SRMAgentService Main Start..."); JLogger.LogDebug(null, "SRMAgentService creating services instances array"); ServiceBase[] servicesToRun = new ServiceBase[] { new AgentServiceCommand(), new AgentServiceWatcher() }; JLogger.LogDebug(null, "SRMAgentService run services instances array"); ServiceBase.Run(servicesToRun); JLogger.LogInfo(null, "SRMAgentService Main End..."); }
public AgentServiceCommand() { JLogger.LogInfo(this, "AgentServiceCommand() Start"); ServiceName = "SRMAgentServiceCommand"; EventLog.Log = "Application"; CanHandlePowerEvent = true; CanHandleSessionChangeEvent = true; CanPauseAndContinue = true; CanShutdown = true; CanStop = true; InitializeComponent(); JLogger.LogInfo(this, "AgentServiceCommand() End"); }
public void Start() { JLogger.LogInfo(this, "Start() In"); //INIT REMOTE OPERATIONS _factHandlerClient = new SRMServerAccess(); //Enroll Machine //JMachine.Id = _factHandlerClient.EnrollMachine(JMachine.GetMachine()); //Get Configuration //_factHandlerClient.GetMachineConfiguration(_machine); //Start CommandService try { JLogger.LogDebug(this, "Se crea el service host con la direccion base."); var baseAddress = new Uri("http://localhost:8080/CommandService"); _commandService = new ServiceHost(typeof(CommandService), baseAddress); JLogger.LogDebug(this, "Se configura para presentar el metadata."); var smb = new ServiceMetadataBehavior { HttpGetEnabled = true, MetadataExporter = { PolicyVersion = PolicyVersion.Policy15 } }; _commandService.Description.Behaviors.Add(smb); JLogger.LogDebug(this, "Se Abre la comunicacion."); _commandService.Open(); } catch (Exception ex) { JLogger.LogError(this, "Error al crear el host.", ex); } //Start Watchers _watcherLoader = new WatcherLoader(); _watcherLoader.StartWatchers(); JLogger.LogInfo(this, "Stop() Out"); }
public void Stop() { JLogger.LogInfo(this, "Stop() In"); //STOP COMMANDSERVICE if (_commandService != null) { _commandService.Close(); _commandService = null; } //STOP WATCHERS if (_watcherLoader != null) { _watcherLoader.StopWatchers(); _watcherLoader = null; } JLogger.LogInfo(this, "Stop() Out"); }
public AgentServiceWatcher() { JLogger.LogInfo(this, "AgentServiceWatcher() Start"); _wl = new WatcherLoader(); ServiceName = "SRMAgentServiceWatcher"; EventLog.Log = "Application"; // These Flags set whether or not to handle that specific // type of event. Set to true if you need it, false otherwise. CanHandlePowerEvent = true; CanHandleSessionChangeEvent = true; CanPauseAndContinue = true; CanShutdown = true; CanStop = true; InitializeComponent(); JLogger.LogInfo(this, "AgentServiceWatcher() End"); }
private void SaveFactToLog(string message) { JLogger.LogInfo(this, "SaveFactToLog()"); var sbFactMessage = new StringBuilder(); sbFactMessage.AppendFormat("{0}-{1}{2}", DateTime.Now.ToString("yyyyMMddHHmmssff", CultureInfo.InvariantCulture), message, Environment.NewLine); JLogger.LogDebug(this, "Opening {0} file to write", _savedFactFileName); lock (_objectLock) { using (var factFile = File.Open(SRMAgentPaths.SRMData + _savedFactFileName, FileMode.Append, FileAccess.Write) ) { JLogger.LogDebug(this, "Writing to file", _savedFactFileName); factFile.Write(Encoding.ASCII.GetBytes(sbFactMessage.ToString()), 0, sbFactMessage.Length); } } }
private ICommand GetCommand(string id, string command) { JLogger.LogInfo(this, "getCommand(): id:{0} command:{1}", id, command); var assembly = Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + @"..\commands\" + id + ".dll"); JLogger.LogDebug("assembly:{0}", assembly); try { var ptrAssembly = Assembly.LoadFile(assembly); //foreach (var item in ptrAssembly.GetTypes()) //{ // if (!item.IsClass) continue; // if (item.GetInterfaces().Contains(typeof (ICommand))) // { // if (((ICommand) Activator.CreateInstance(item)).GetCommandName().ToUpperInvariant() == // command.ToUpperInvariant()) // { // return (ICommand) Activator.CreateInstance(item); // } // } //} foreach (var item in from item in ptrAssembly.GetTypes() where item.IsClass where item.GetInterfaces().Contains(typeof(ICommand)) where string.Equals(((ICommand)Activator.CreateInstance(item)).GetCommandName(), command, StringComparison.InvariantCultureIgnoreCase) select item) { return((ICommand)Activator.CreateInstance(item)); } } catch (Exception ex) { JLogger.LogError(this, "Error trying to LoadAssembly:{0}", ex.Message); } return(null); }
public void Stop() { JLogger.LogInfo(this, "Stop()"); _cts?.Cancel(); }
public WatcherLoader() { JLogger.LogInfo(this, "Class SRMWatcherLoader()"); _watchers = new List <IFactWatcher>(); LoadWatchers(); }
public void Start() { JLogger.LogInfo(this, "Start()"); //GET BASE CONFIGURATION string[] savedEventLogsName = Config.GetValueByKey("EVENT_LOGS")?.Split(','); int savedLastEntryIndex; //Latest index value processed and saved int.TryParse(Persistence.GetValueByKey("LAST_ENTRY_INDEX"), out savedLastEntryIndex); var lastEntryIndex = 0; //Latest index value from actual event logs DateTime lastEntryDatetime = new DateTime(); DateTime savedLastEntryDatetime; DateTime.TryParse(Persistence.GetValueByKey("LAST_ENTRY_DATETIME"), out savedLastEntryDatetime); //CREATE EVENT LOG LIST _eventLogs = new List <EventLog>(); //VALIDATE AND ENABLE EVENT CATCH if (savedEventLogsName != null) { foreach (var eventLogName in savedEventLogsName) { JLogger.LogDebug(this, "Checking if EventLog {0} has registry configuration", eventLogName); //CHECK FOR LOGFILE var regEventLog = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Services\\EventLog\\" + eventLogName); if (regEventLog != null) { JLogger.LogDebug(this, "EventLog {0} has registry configuration", eventLogName); var temp = regEventLog.GetValue("File"); if (temp != null) { JLogger.LogDebug(this, "EventLog {0} has EventLog file created", eventLogName); //CREATING AN EVENTLOG OBJECT FROM THE VALIDATED STRING JLogger.LogDebug(this, "Creating EventLog object for {0}", eventLogName); var eventLog = new EventLog(eventLogName); _eventLogs.Add(eventLog); //ATTACH EVENT JLogger.LogDebug(this, "Attaching event handler to EventLog {0}", eventLogName); eventLog.EntryWritten += OnEntryWritten; eventLog.EnableRaisingEvents = true; //GETTING THE LAST ENTRY FROM THE EVENTLOG JLogger.LogDebug(this, "Getting the last entry from the EventLog {0}", eventLogName); var lastEntry = (from EventLogEntry ent in eventLog.Entries orderby ent.TimeGenerated select ent) .LastOrDefault(); if (lastEntry != null && lastEntry.Index > lastEntryIndex) { JLogger.LogDebug(this, "EventLog {0} last entry was {1}", eventLogName, lastEntry.Message); lastEntryIndex = lastEntry.Index; } if (lastEntry != null && lastEntry.TimeGenerated >= lastEntryDatetime) { lastEntryDatetime = lastEntry.TimeGenerated; } } else { //NO FILE ASSIGNED FOR THE EVENTLOG JLogger.LogError(this, "EventLog {0} has not file assigned", eventLogName); } } else { //NO REGISTRY KEY CREATED FOR THE EVENTLOG JLogger.LogError(this, "EventLog {0} has not registry key created", eventLogName); } } } //PROCESS ALL EVENTS JLogger.LogDebug(this, "Processing events in chequed EventLogs"); foreach (var eventLog in _eventLogs) { JLogger.LogDebug(this, "Processing events in EventLog {0}", eventLog.LogDisplayName); var filteredEventEntrys = (from EventLogEntry ent in eventLog.Entries.Cast <EventLogEntry>() .Where(x => x.TimeGenerated <= lastEntryDatetime && x.TimeGenerated >= savedLastEntryDatetime) orderby ent.TimeGenerated select ent); //var filteredEventEntrys = (from EventLogEntry ent // in eventLog.Entries.Cast<EventLogEntry>().Where(x => x.Index <= lastEntryIndex && x.Index > savedLastEntryIndex) // orderby ent.Index // select ent); JLogger.LogDebug(this, "eventslog:{0} FILTERED:{1} TOTAL:{2}", eventLog.LogDisplayName, filteredEventEntrys.Count(), eventLog.Entries.Count); foreach (var filteredEventEntry in filteredEventEntrys) { JLogger.LogDebug(this, "Start() Processing entry: {0}", filteredEventEntry.Index); var fieldSeparator = (char)28; var sbFactMessage = new StringBuilder(); sbFactMessage.AppendFormat("{0}{1}{2}{3}{4}{5}{6}{7}{8}", eventLog.LogDisplayName, fieldSeparator, filteredEventEntry.Index, fieldSeparator, filteredEventEntry.Source, fieldSeparator, filteredEventEntry.TimeGenerated, fieldSeparator, filteredEventEntry.Message); //FIRE NEW EVENT JLogger.LogDebug(this, "Start() Firing Event: {0}", sbFactMessage.ToString()); OnNewFact?.Invoke(this, new FactWatcherEventArgs(GetFactWatcherName(), filteredEventEntry.TimeGenerated, sbFactMessage.ToString())); //SAVE LOG FACTS JLogger.LogDebug(this, "Validate if is configured fact file"); if (!string.IsNullOrEmpty(_savedFactFileName)) { SaveFactToLog(sbFactMessage.ToString()); } //STORE THE LATEST INDEX PROCESSED Persistence.SetValueByKey("LAST_ENTRY_INDEX", filteredEventEntry.Index.ToString()); Persistence.SetValueByKey("LAST_ENTRY_DATETIME", filteredEventEntry.TimeGenerated.ToString(CultureInfo.InvariantCulture)); //Config.Save(); } } }
// ---------------------------------------------------------------- // THIS COMMAND LIST ALL THE AVAILABLE DRIVES IN THE MACHINE // ---------------------------------------------------------------- public ICommandResponse[] RunCommand(ICommandRequest request) { JLogger.LogInfo(this, "runCommand:{0}", request.ToString()); ICommandResponse[] cmdResp; var driveInfoList = new List <JDriveInfo>(); try { //foreach (var di in DriveInfo.GetDrives()) //{ // if (!di.IsReady) // { // continue; // } // //NO_REMOVABLE_DRIVES - DON'T RETURN REMOVABLE DRIVES // if (di.DriveType != DriveType.Fixed && request.GetParams().Contains("NO_REMOVABLE_DRIVES")) // { // continue; // } // //NO_EMPTY_DRIVES - DON'T RETURN EMPTY DRIVES // if (di.TotalSize == 0 && request.GetParams().Contains("NO_EMPTY_DRIVES")) // { // continue; // } // var data = new JDriveInfo // { // DEVICEID = di.Name, // FREESPACE = di.TotalFreeSpace.ToString(), // TOTALSIZE = di.TotalSize.ToString(), // USEDSPACE = (di.TotalSize - di.TotalFreeSpace).ToString() // }; // driveInfoList.Add(data); //} driveInfoList.AddRange(from di in DriveInfo.GetDrives() where di.IsReady where di.DriveType == DriveType.Fixed || !request.GetParams().Contains(NoRemovableDrives) where di.TotalSize != 0 || !request.GetParams().Contains(NoEmptyDrives) select new JDriveInfo { DEVICEID = di.Name, FREESPACE = di.TotalFreeSpace.ToString(), TOTALSIZE = di.TotalSize.ToString(), USEDSPACE = (di.TotalSize - di.TotalFreeSpace).ToString() }); var respData = JsonConvert.SerializeObject(driveInfoList.ToArray()); cmdResp = new ICommandResponse[] { new CommandResponse(CommandResponseCodes.OkCommandSuccess[0], respData) }; } catch (Exception ex) { cmdResp = new ICommandResponse[] { new CommandResponse(CommandResponseCodes.ErrorExceptionFound[0], CommandResponseCodes.ErrorExceptionFound[1] + ex.Message) }; } JLogger.LogInfo(this, "runCommand Response:{0}", cmdResp.ToString()); return(cmdResp); }
protected override void OnSessionChange(SessionChangeDescription changeDescription) { JLogger.LogInfo(this, "OnSessionChange() Start"); base.OnSessionChange(changeDescription); JLogger.LogInfo(this, "OnSessionChange() End"); }
protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus) { JLogger.LogInfo(this, "OnPowerEvent() Start"); return(base.OnPowerEvent(powerStatus)); //JLogger.LogInfo(this, "OnPowerEvent() End"); }
protected override void OnShutdown() { JLogger.LogInfo(this, "OnShutdown() Start"); base.OnShutdown(); JLogger.LogInfo(this, "OnShutdown() End"); }
protected override void OnContinue() { JLogger.LogInfo(this, "OnContinue() Start"); base.OnContinue(); JLogger.LogInfo(this, "OnContinue() End"); }