/// <summary> /// Отправка item's в лог /// </summary> /// <param name="items">item's</param> public void SendStatistics(StatisticsItemsFullSet items) { if (_monitoringOptions.EnableMonitoring) { items.ForEach(x => SendOneItem(_log, x)); } }
public static IServiceCollection RegisterMonitoring <Monitoring>(this IServiceCollection services, IConfiguration configuration, IEnumerable <IDestination> newDestinations, string environmentName) where Monitoring : class { var section = configuration.GetSection("MonitoringOptions"); var monitoringOptions = new MonitoringOptions(); section.Bind(monitoringOptions); var monitoringIOptions = Options.Create(monitoringOptions); services.Configure <MonitoringOptions>(section); var commonSet = new CommonMonitoringSet(environmentName); services.AddSingleton(commonSet); services.AddSingleton <Monitoring>(); services.AddSingleton <IMonitoringSender, MonitoringSender>(); var destinations = new List <IDestination>(newDestinations); var jsonNLogDestination = new JsonNLogDestination(commonSet, monitoringIOptions); destinations.Add(jsonNLogDestination); services.AddSingleton <IEnumerable <IDestination> >(destinations); var groups = new ConcurrentDictionary <(string, string), IStatisticsMonitoringItem>(); services.AddSingleton <IDictionary <(string, string), IStatisticsMonitoringItem> >(groups); var statItems = typeof(Monitoring).GetProperties() .Where(p => typeof(IStatisticsMonitoringItem).IsAssignableFrom(p.PropertyType)) .Select(x => { var item = (IStatisticsMonitoringItem)Activator.CreateInstance(x.PropertyType); item.Name = x.PropertyType.Name; item.SetProperties(); return(item); } ) .Select(x => new KeyValuePair <string, IStatisticsMonitoringItem>(x.Name, x)); var itemsDictionary = new ConcurrentDictionary <string, IStatisticsMonitoringItem>(statItems); foreach (var item in itemsDictionary) { services.AddSingleton(item.Value.GetType(), item.Value); } services.AddSingleton <IDictionary <string, IStatisticsMonitoringItem> >(itemsDictionary); var set = new StatisticsItemsFullSet(itemsDictionary, groups); services.AddSingleton(set); var statisticsSender = new StatisticsSender(monitoringIOptions, destinations, set); services.AddSingleton <IStatisticsSender>(statisticsSender); return(services); }
public StatisticsMonitoringWrapper(StatisticsItemsFullSet monitoring, T item) { if (!monitoring.Items.ContainsKey(typeof(T).Name)) { monitoring.Items[typeof(T).Name] = item; } Item = item; }
/// <summary> /// Применение action для каждого элемента fullset /// </summary> /// <param name="items"></param> /// <param name="action"></param> public static void ForEach(this StatisticsItemsFullSet items, Action <IStatisticsMonitoringItem> action) { foreach (var item in items.GroupItems.Values) { action(item); } foreach (var item in items.Items.Values) { action(item); } }
public StatisticsSender( IOptions <MonitoringOptions> monitoringOptions, IEnumerable <IDestination> destinations, StatisticsItemsFullSet statisticItems) { _destinations = destinations; _monitoringOptions = monitoringOptions.Value; _fullSet = statisticItems; if (_monitoringOptions.RunImmediately) { StartMonitoring(); } }
public ActionController(ProxyAPIMonitoring monitoring, StatisticsItemsFullSet statisticsItemsFullSet) { _rnd = new Random(); _monitoring = monitoring; StatisticsItemsFullSet = statisticsItemsFullSet; }
public override void OnEntry(MethodExecutionArgs args) { _set = ((ISetProvider)args.Instance).StatisticsItemsFullSet; AfterEntry(args); }
/// <summary> /// Вызов реинициализации для item's /// </summary> /// <param name="items"></param> public static void ReInit(this StatisticsItemsFullSet items) { items.ForEach(x => x.ReInit()); }