Exemple #1
0
 /// <summary>
 /// Отправка item's в лог
 /// </summary>
 /// <param name="items">item's</param>
 public void SendStatistics(StatisticsItemsFullSet items)
 {
     if (_monitoringOptions.EnableMonitoring)
     {
         items.ForEach(x => SendOneItem(_log, x));
     }
 }
Exemple #2
0
        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;
        }
Exemple #4
0
        /// <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();
            }
        }
Exemple #6
0
 public ActionController(ProxyAPIMonitoring monitoring, StatisticsItemsFullSet statisticsItemsFullSet)
 {
     _rnd                   = new Random();
     _monitoring            = monitoring;
     StatisticsItemsFullSet = statisticsItemsFullSet;
 }
Exemple #7
0
 public override void OnEntry(MethodExecutionArgs args)
 {
     _set = ((ISetProvider)args.Instance).StatisticsItemsFullSet;
     AfterEntry(args);
 }
Exemple #8
0
 /// <summary>
 /// Вызов реинициализации для item's
 /// </summary>
 /// <param name="items"></param>
 public static void ReInit(this StatisticsItemsFullSet items)
 {
     items.ForEach(x => x.ReInit());
 }