Esempio n. 1
0
        /// <summary>
        /// Конструктор для создания пустой подкатегории WinEmptyCategory.
        /// </summary>
        /// <param name="name">Название категории</param>
        /// <param name="description">Описание категории</param>
        /// <param name="rootName">Корневое имя</param>
        /// <param name="info">Информация по функционированию</param>
        internal WinEmptyCategory(string name, string description, string rootName, WinCountersWorkingInfo info)
            : base(name, description)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }

            if (string.IsNullOrEmpty(rootName))
            {
                FullName = name;
            }
            else if (string.IsNullOrEmpty(name))
            {
                FullName = rootName;
            }
            else
            {
                FullName = rootName + "." + name;
            }

            _info = info;

            _state           = WinCategoryState.Created;
            _childCategories = new List <Category>();
        }
Esempio n. 2
0
 /// <summary>
 /// Вызывается из родительской MultiInstanceCategory при удалении данного инстанса
 /// </summary>
 /// <param name="removeInstance">Удалять ли данный инстанс в Windows</param>
 internal void OnRemoveFromMultiInstanceCategory(bool removeInstance)
 {
     _state = WinCategoryState.Disposed;
     foreach (var counter in _counters)
     {
         ((IWinCounterInitialization)counter.Value).CounterDispose(removeInstance);
     }
 }
Esempio n. 3
0
 /// <summary>
 /// Освобождение ресурсов
 /// </summary>
 /// <param name="isUserCall">Было ли инициировано пользователем</param>
 protected override void Dispose(bool isUserCall)
 {
     if (isUserCall)
     {
         _state = WinCategoryState.Disposed;
     }
     base.Dispose(isUserCall);
 }
        /// <summary>
        /// Внутренний метод освобождения ресурсов
        /// </summary>
        /// <param name="isUserCall">Вызван ли явно</param>
        protected override void Dispose(bool isUserCall)
        {
            if (_state != WinCategoryState.Disposed)
            {
                _state = WinCategoryState.Disposed;

                foreach (var category in _childCategories)
                {
                    ((IWinCategoryInitialization)category).DisposeCascade();
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Конструктор WinSingleInstanceCategory
        /// </summary>
        /// <param name="name">Имя категории</param>
        /// <param name="description">Описание категории</param>
        /// <param name="rootName">Корневое имя</param>
        /// <param name="info">Информация о функционировании</param>
        internal WinSingleInstanceCategory(string name, string description, string rootName, WinCountersWorkingInfo info)
            : base(name, description)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }

            FullName = string.IsNullOrEmpty(rootName) ? name : rootName + "." + name;
            _info    = info;

            _state           = WinCategoryState.Created;
            _childCategories = new List <Category>();
        }
        /// <summary>
        /// Выполнить инициализацию всех дочерних категорий.
        /// Без инициализации они не будут работать.
        /// </summary>
        public override void InitAll()
        {
            if (_state == WinCategoryState.Disposed)
            {
                throw new ObjectDisposedException(this.GetType().Name);
            }

            _state = WinCategoryState.Initialized;

            foreach (var category in _childCategories)
            {
                ((IWinCategoryInitialization)category).InitCascade();
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Инициализация счетчиков (создание категорий, инстанцирование самих счетчиков)
        /// </summary>
        protected internal override void Init()
        {
            if (_state == WinCategoryState.Disposed)
            {
                throw new ObjectDisposedException(this.GetType().Name);
            }

            if (_state == WinCategoryState.Initialized)
            {
                return;
            }

            _state = WinCategoryState.Initialized;

            base.Init();
        }
Esempio n. 8
0
        /// <summary>
        /// Внутренний метод для инициализации
        /// </summary>
        internal void Init()
        {
            if (_state == WinCategoryState.Disposed)
            {
                throw new ObjectDisposedException(this.GetType().Name);
            }
            if (_state == WinCategoryState.Initialized)
            {
                return;
            }

            _state = WinCategoryState.Initialized;

            foreach (var counter in _counters)
            {
                ((IWinCounterInitialization)counter.Value).CounterInit(((WinMultiInstanceCategory)this.Parent).FullName, this.InstanceName);
            }
        }
        /// <summary>
        /// Конструктор WinCounterFactory
        /// </summary>
        /// <param name="instMode">Режим работы</param>
        /// <param name="namePrefix">Префикс имени категории</param>
        /// <param name="machineName">Имя машины (null или '.' для локальной)</param>
        /// <param name="readOnlyCounters">Счётчики только для чтения</param>
        /// <param name="preferedBitness">Предпочитать ли 64 битные счётчики</param>
        /// <param name="existedInstancesTreatment">Как обрабатывать существующие в Windows инстансы</param>
        public WinCounterFactory(WinCountersInstantiationMode instMode, string namePrefix, string machineName, bool readOnlyCounters, WinCountersPreferedBitness preferedBitness, WinCountersExistedInstancesTreatment existedInstancesTreatment)
        {
            bool prefer64BitCounters = Environment.Is64BitOperatingSystem;

            if (preferedBitness == WinCountersPreferedBitness.Prefer32BitCounters)
            {
                prefer64BitCounters = false;
            }
            else if (preferedBitness == WinCountersPreferedBitness.Prefer64BitCounters)
            {
                prefer64BitCounters = true;
            }

            _info       = new WinCountersWorkingInfo(instMode, machineName, readOnlyCounters, prefer64BitCounters, existedInstancesTreatment);
            _namePrefix = namePrefix != null?namePrefix.TrimEnd('.') : "";

            _state           = WinCategoryState.Created;
            _childCategories = new List <Category>();
        }
Esempio n. 10
0
 /// <summary>
 /// Конструктор для создания инстанса WinInstanceInMultiInstanceCategory
 /// </summary>
 /// <param name="parent">Родительская многоинстовая категория</param>
 /// <param name="instanceName">Имя инстанса</param>
 internal WinInstanceInMultiInstanceCategory(WinMultiInstanceCategory parent, string instanceName)
     : base(parent, instanceName)
 {
     _state    = WinCategoryState.Created;
     _counters = parent.Counters.ToDictionary(key => key.Name, val => val.CreateCounter());
 }