Exemplo n.º 1
0
        private void ProcessStats(object state)
        {
            if (dispatcher.CanDispatch())
            {
                var currentTrace = Interlocked.Exchange(ref grainTrace, new ConcurrentDictionary <string, SiloGrainTraceEntry>());

                var items = currentTrace.Values.ToArray();

                foreach (var item in items)
                {
                    item.Grain = TypeFormatter.Parse(item.Grain);
                }

                try
                {
                    dispatcher.DispatchAsync(() =>
                    {
                        this.dashboardGrain = this.dashboardGrain ?? grainFactory.GetGrain <IDashboardGrain>(0);

                        return(dashboardGrain.SubmitTracing(siloAddress, items.AsImmutable()));
                    }).Ignore();
                }
                catch (Exception ex)
                {
                    logger.LogWarning(100001, ex, "Exception thrown sending tracing to dashboard grain");
                }
            }
        }
Exemplo n.º 2
0
        private void ProcessStats(object state)
        {
            if (dispatcher.CanDispatch())
            {
                var currentTrace = Interlocked.Exchange(ref grainTrace, new ConcurrentDictionary <string, GrainTraceEntry>());

                var items = currentTrace.Values.ToArray();

                foreach (var item in items)
                {
                    item.Grain = TypeFormatter.Parse(item.Grain);
                }

                try
                {
                    dispatcher.DispatchAsync(async() =>
                    {
                        var dashboardGrain = grainFactory.GetGrain <IDashboardGrain>(0);

                        await dashboardGrain.SubmitTracing(siloAddress, items).ConfigureAwait(false);
                    }).Wait(30000);
                }
                catch (Exception ex)
                {
                    logger.LogWarning(100001, "Exception thrown sending tracing to dashboard grain", ex);
                }
            }
        }
Exemplo n.º 3
0
        public Task ReportStats(List <ICounter> statsCounters)
        {
            if (dispatcher.CanDispatch())
            {
                var grain = runtime.GrainFactory.GetGrain <ISiloGrain>(runtime.ToSiloAddress());

                var values = statsCounters.Select(x => new StatCounter
                {
                    Name  = x.Name,
                    Value = x.GetValueString(),
                    Delta = x.IsValueDelta ? x.GetDeltaString() : null
                }).OrderBy(x => x.Name).ToArray();

                dispatcher.DispatchAsync(() => grain.ReportCounters(values));
            }

            return(Task.CompletedTask);
        }
        public void Flush()
        {
            if (dispatcher.CanDispatch())
            {
                var grain = grainFactory.GetGrain <ISiloGrain>(localSiloDetails.SiloAddress.ToParsableString());

                var counters = new List <StatCounter>();

                foreach (var metric in metrics.ToArray())
                {
                    var v = metric.Value.Current;
                    var d = metric.Value.Current - metric.Value.Last;

                    counters.Add(new StatCounter {
                        Name = metric.Key, Value = v.ToString(CultureInfo.InvariantCulture), Delta = d.ToString(CultureInfo.InvariantCulture)
                    });
                }

                foreach (var metric in timespanMetrics.ToArray())
                {
                    var v = metric.Value.Current;
                    var d = metric.Value.Current - metric.Value.Last;

                    counters.Add(new StatCounter {
                        Name = metric.Key, Value = v.ToString("c", CultureInfo.InvariantCulture), Delta = d.ToString("c", CultureInfo.InvariantCulture)
                    });
                }

                if (counters.Count > 0)
                {
                    var countersArray = counters.ToArray();

                    dispatcher.DispatchAsync(() => grain.ReportCounters(countersArray));
                }
            }
        }
Exemplo n.º 5
0
        public async Task Invoke(HttpContext context)
        {
            var request = context.Request;

            if (request.Path == "/" || string.IsNullOrEmpty(request.Path))
            {
                await WriteIndexFile(context);

                return;
            }
            if (request.Path == "/favicon.ico")
            {
                await WriteFileAsync(context, "favicon.ico", "image/x-icon");

                return;
            }
            if (request.Path == "/index.min.js")
            {
                await WriteFileAsync(context, "index.min.js", "application/javascript");

                return;
            }

            if (request.Path == "/version")
            {
                await WriteJson(context, new { version = typeof(DashboardMiddleware).Assembly.GetName().Version.ToString() });

                return;
            }

            if (request.Path == "/DashboardCounters")
            {
                var grain  = grainFactory.GetGrain <IDashboardGrain>(0);
                var result = await dispatcher.DispatchAsync(grain.GetCounters).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path == "/ClusterStats")
            {
                var grain  = grainFactory.GetGrain <IDashboardGrain>(0);
                var result = await dispatcher.DispatchAsync(grain.GetClusterTracing).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path == "/Reminders")
            {
                try
                {
                    var grain  = grainFactory.GetGrain <IDashboardRemindersGrain>(0);
                    var result = await dispatcher.DispatchAsync(() => grain.GetReminders(1, REMINDER_PAGE_SIZE)).ConfigureAwait(false);

                    await WriteJson(context, result);
                }
                catch
                {
                    // if reminders are not configured, the call to the grain will fail
                    await WriteJson(context, new ReminderResponse { Reminders = new ReminderInfo[0], Count = 0 });
                }

                return;
            }

            if (request.Path.StartsWithSegments("/Reminders", out var pageString1) && int.TryParse(pageString1.ToValue(), out var page))
            {
                try
                {
                    var grain  = grainFactory.GetGrain <IDashboardRemindersGrain>(0);
                    var result = await dispatcher.DispatchAsync(() => grain.GetReminders(page, REMINDER_PAGE_SIZE)).ConfigureAwait(false);

                    await WriteJson(context, result);
                }
                catch
                {
                    // if reminders are not configured, the call to the grain will fail
                    await WriteJson(context, new ReminderResponse { Reminders = new ReminderInfo[0], Count = 0 });
                }

                return;
            }

            if (request.Path.StartsWithSegments("/HistoricalStats", out var remaining))
            {
                var grain  = grainFactory.GetGrain <ISiloGrain>(remaining.ToValue());
                var result = await dispatcher.DispatchAsync(grain.GetRuntimeStatistics).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path.StartsWithSegments("/SiloProperties", out var address1))
            {
                var grain  = grainFactory.GetGrain <ISiloGrain>(address1.ToValue());
                var result = await dispatcher.DispatchAsync(grain.GetExtendedProperties).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path.StartsWithSegments("/SiloStats", out var address2))
            {
                var grain  = grainFactory.GetGrain <IDashboardGrain>(0);
                var result = await dispatcher.DispatchAsync(() => grain.GetSiloTracing(address2.ToValue())).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path.StartsWithSegments("/SiloCounters", out var address3))
            {
                var grain  = grainFactory.GetGrain <ISiloGrain>(address3.ToValue());
                var result = await dispatcher.DispatchAsync(grain.GetCounters).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path.StartsWithSegments("/GrainStats", out var grainName1))
            {
                var grain  = grainFactory.GetGrain <IDashboardGrain>(0);
                var result = await dispatcher.DispatchAsync(() => grain.GetGrainTracing(grainName1.ToValue())).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path == "/Trace")
            {
                await TraceAsync(context);

                return;
            }

            await next(context);
        }
Exemplo n.º 6
0
        public async Task Invoke(HttpContext context)
        {
            var request = context.Request;

            if (request.Path == "/")
            {
                await WriteIndexFile(context);

                return;
            }
            if (request.Path == "/favicon.ico")
            {
                await WriteFileAsync(context, "favicon.ico", "image/x-icon");

                return;
            }
            if (request.Path == "/index.min.js")
            {
                await WriteFileAsync(context, "index.min.js", "application/javascript");

                return;
            }

            if (request.Path == "/DashboardCounters")
            {
                var grain  = grainFactory.GetGrain <IDashboardGrain>(0);
                var result = await dispatcher.DispatchAsync(grain.GetCounters).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path == "/ClusterStats")
            {
                var grain  = grainFactory.GetGrain <IDashboardGrain>(0);
                var result = await dispatcher.DispatchAsync(grain.GetClusterTracing).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path == "/Reminders")
            {
                var grain  = grainFactory.GetGrain <IDashboardRemindersGrain>(0);
                var result = await dispatcher.DispatchAsync(() => grain.GetReminders(1, 25)).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path.StartsWithSegments("/Reminders", out var pageString1) && int.TryParse(pageString1.ToValue(), out var page))
            {
                var grain  = grainFactory.GetGrain <IDashboardRemindersGrain>(0);
                var result = await dispatcher.DispatchAsync(() => grain.GetReminders(page, 25)).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path.StartsWithSegments("/HistoricalStats", out var remaining))
            {
                var grain  = grainFactory.GetGrain <ISiloGrain>(remaining.ToValue());
                var result = await dispatcher.DispatchAsync(grain.GetRuntimeStatistics).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path.StartsWithSegments("/SiloProperties", out var address1))
            {
                var grain  = grainFactory.GetGrain <ISiloGrain>(address1.ToValue());
                var result = await dispatcher.DispatchAsync(grain.GetExtendedProperties).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path.StartsWithSegments("/SiloStats", out var address2))
            {
                var grain  = grainFactory.GetGrain <IDashboardGrain>(0);
                var result = await dispatcher.DispatchAsync(() => grain.GetSiloTracing(address2.ToValue())).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path.StartsWithSegments("/SiloCounters", out var address3))
            {
                var grain  = grainFactory.GetGrain <ISiloGrain>(address3.ToValue());
                var result = await dispatcher.DispatchAsync(grain.GetCounters).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path.StartsWithSegments("/GrainStats", out var grainName1))
            {
                var grain  = grainFactory.GetGrain <IDashboardGrain>(0);
                var result = await dispatcher.DispatchAsync(() => grain.GetGrainTracing(grainName1.ToValue())).ConfigureAwait(false);

                await WriteJson(context, result);

                return;
            }

            if (request.Path == "/Trace")
            {
                await TraceAsync(context);

                return;
            }

            await next(context);
        }