예제 #1
0
 protected Counter(string category, string name, CounterType type, CounterLevel level, CounterKind kind, CounterUnit unit)
 {
     Category = category;
     Name     = name;
     Type     = type;
     Level    = level;
     Kind     = kind;
     Unit     = unit;
 }
예제 #2
0
        public static CounterItem <T> Retrieve(string category, string name, CounterType type, CounterLevel level, CounterKind kind, CounterUnit unit, List <CounterItemValue <T> > values)
        {
            var item = ReferencePool <CounterItem <T> > .Shared.New();

            item.Environment = Core.EnvironmentName;
            item.Application = Core.ApplicationName;
            item.Category    = category;
            item.Name        = name;
            item.Type        = type;
            item.Level       = level;
            item.Kind        = kind;
            item.Unit        = unit;
            item.Values      = values;
            return(item);
        }
예제 #3
0
 internal DecimalCounter(string category, string name, CounterType type, CounterLevel level, CounterKind kind, CounterUnit unit) : base(category, name, type, level, kind, unit)
 {
 }
예제 #4
0
        public static ServiceDescriptor GetDescriptor(Type serviceType, string counterCategory = null, CounterLevel counterLevel = CounterLevel.User, CounterKind counterKind = CounterKind.Application)
        {
            var descriptor = new ServiceDescriptor
            {
                Name = serviceType.FullName
            };
            var isInterface = serviceType.IsInterface;
            var methodsInfo = serviceType.AllMethods().OrderBy(i => i.Name + "[" + i.GetParameters()?.Select(p => p.Name).Join(", ") + "]");

            foreach (var mInfo in methodsInfo)
            {
                if (!mInfo.IsPublic || mInfo.IsSpecialName)
                {
                    continue;
                }
                var isRpcMethod = mInfo.IsDefined(typeof(RPCMethodAttribute)) || isInterface;
                if (!isRpcMethod)
                {
                    continue;
                }
                var mDesc = new MethodDescriptor
                {
                    Method           = mInfo.GetMethodAccessor(),
                    Name             = mInfo.Name,
                    ReturnType       = GetTypeName(mInfo.ReturnType),
                    TypeOfReturnType = mInfo.ReturnType
                };
                if (mInfo.ReturnType == typeof(Task) || mInfo.ReturnType.BaseType == typeof(Task))
                {
                    mDesc.ReturnIsTask = true;
                    if (mInfo.ReturnType.GenericTypeArguments.Length > 0)
                    {
                        mDesc.ReturnTaskResult     = mInfo.ReturnType.GetProperty("Result").GetFastPropertyInfo();
                        mDesc.CreateTaskFromResult = typeof(Task).GetMethod("FromResult").MakeGenericMethod(new[] { mInfo.ReturnType.GenericTypeArguments[0] }).GetMethodAccessor();
                    }
                    else
                    {
                        mDesc.ReturnTaskResult     = null;
                        mDesc.CreateTaskFromResult = null;
                    }
                }
                if (counterCategory != null)
                {
                    mDesc.Counter = Core.Counters.GetDoubleCounter(counterCategory, serviceType.FullName + "\\" + mDesc.Name, CounterType.Average, counterLevel, counterKind, CounterUnit.Milliseconds);
                }

                RegisterServiceDescriptorType(descriptor, mInfo.ReturnType);

                var pars = mInfo.GetParameters();
                mDesc.Parameters = new ParameterDescriptor[pars.Length];
                for (var i = 0; i < pars.Length; i++)
                {
                    var p    = pars[i];
                    var pDes = new ParameterDescriptor
                    {
                        Parameter = p,
                        Name      = p.Name,
                        Index     = p.Position,
                        Type      = GetTypeName(p.ParameterType)
                    };
                    RegisterServiceDescriptorType(descriptor, p.ParameterType);
                    mDesc.Parameters[i] = pDes;
                }
                mDesc.Id = GetMethodId(descriptor, mDesc);
                descriptor.Methods.Add(mDesc.Id, mDesc);
            }

            var eventsInfo = serviceType.GetRuntimeEvents();

            foreach (var eInfo in eventsInfo)
            {
                if (eInfo.IsSpecialName)
                {
                    continue;
                }
                var isRpcEvent = eInfo.IsDefined(typeof(RPCEventAttribute)) || isInterface;
                if (!isRpcEvent)
                {
                    continue;
                }
                var name         = eInfo.Name;
                var eventHandler = GetTypeName(eInfo.EventHandlerType);
                RegisterServiceDescriptorType(descriptor, eInfo.EventHandlerType);
                descriptor.Events.Add(name, new EventDescriptor {
                    Name = name, Type = eventHandler, Event = eInfo
                });
            }
            return(descriptor);
        }