Ejemplo n.º 1
0
        private dynamic GetSeries(IMetricRegistry metricRegistry, IMetricAggregator metricAggregator, ExpressionCompiler expressionCompiler)
        {
            try
            {
                var model = new SeriesQueryModel();
                this.BindTo(model, new BindingConfig {
                    BodyOnly = false
                });

                var now   = DateTime.UtcNow;
                var from  = DateTimeParser.ParseDateTime(model.From, now, now.AddHours(-1));
                var until = DateTimeParser.ParseDateTime(model.Until, now, now);

                var environment = new Statsify.Core.Expressions.Environment
                {
                    MetricRegistry         = metricRegistry,
                    QueuedMetricDatapoints = metricAggregator.Queue
                };

                var evalContext = new EvalContext(@from, until);

                var metrics = new List <Core.Model.Metric>();
                foreach (var expression in model.Expression.Select(HttpUtility.UrlDecode))
                {
                    var e = expressionCompiler.Parse(expression).Single();

                    if (e is MetricSelectorExpression)
                    {
                        e = new EvaluatingMetricSelectorExpression(e as MetricSelectorExpression);
                    } // if

                    var r = (Core.Model.Metric[])e.Evaluate(environment, evalContext);

                    metrics.AddRange(r);
                } // foreach

                var seriesViewList =
                    metrics.
                    Select(m =>
                           new SeriesView {
                    Target     = m.Name,
                    Datapoints =
                        m.Series.Datapoints.
                        Select(d => new[] { d.Value, d.Timestamp.ToUnixTimestamp() }).
                        ToArray()
                }).
                    ToArray();

                return(Response.AsJson(seriesViewList));
            }
            catch (Exception e)
            {
                return(Response.AsJson(new { e.Message, e.StackTrace }, HttpStatusCode.InternalServerError));
            }
        }
Ejemplo n.º 2
0
        public void Parse()
        {
            var sources = new[] {
                "summarize(alias_by_fragment(ema(servers.srv-aps3.system.processor.{total*,user*}, 50), 2, 4), 'sum', '1d', false)",
                "sort_by_name(alias_by_fragment(summarize(servers.*.system.processor.total_time, \"max\", \"10m\"), 1, 4))"
            };

            const int N = 10000;

            var expressionCompiler = new ExpressionCompiler();
            var expressions        = expressionCompiler.Parse(sources[0]).ToList();

            var stopwatch = Stopwatch.StartNew();

            for (var n = 0; n < N; ++n)
            {
                foreach (var source in sources)
                {
                    expressions = expressionCompiler.Parse(source).ToList();
                }
            }

            Console.WriteLine(stopwatch.Elapsed);
        }