Exemple #1
0
        protected override async Task <int> Run()
        {
            var connection = _connectionFactory.Connect(_connection);

            if (!_deleteAllEvents)
            {
                Log.Error("The `delete-all-events` option must be specified");
                return(1);
            }

            if (_afterDuration == null)
            {
                Log.Error("A duration must be specified using `after`");
                return(1);
            }

            var duration = DurationMoniker.ToTimeSpan(_afterDuration);

            var policy = await connection.RetentionPolicies.TemplateAsync();

            policy.RetentionTime = duration;

            policy = await connection.RetentionPolicies.AddAsync(policy);

            _output.WriteEntity(policy);

            return(0);
        }
Exemple #2
0
        public void MonikersAreParsedAndFormatted(string duration, long equivalentMilliseconds)
        {
            var ts = DurationMoniker.ToTimeSpan(duration);

            Assert.Equal(TimeSpan.FromMilliseconds(equivalentMilliseconds), ts);

            var dm = DurationMoniker.FromTimeSpan(ts);

            Assert.Equal(duration, dm);
        }
Exemple #3
0
        protected override async Task <int> Run()
        {
            var connection = _connectionFactory.Connect(_connection);

            if (_id == null)
            {
                Log.Error("A dashboard id is required");
                return(1);
            }

            if (_chartTitle == null)
            {
                Log.Error("A chart name is required");
                return(1);
            }

            if (_range.Start == null && _range.End != null ||
                _range.End == null && _range.Start != null)
            {
                Log.Error("If `--start` or `--end` is specified, both must be specified");
                return(1);
            }

            if (_lastDuration == null && _range.Start == null)
            {
                Log.Error("A `--last` duration, or range `--start` and `--end`, is required");
                return(1);
            }

            if (_lastDuration != null && _range.Start != null)
            {
                Log.Error("Only one of either `--last` or a `--start`/`--end` range can be specified");
                return(1);
            }

            var dashboard = await connection.Dashboards.FindAsync(_id);

            var charts = dashboard.Charts.Where(c => c.Title == _chartTitle).ToArray();

            if (charts.Length == 0)
            {
                Log.Error("No matching chart was found");
                return(1);
            }

            if (charts.Length > 1)
            {
                Log.Error("More than one matching chart was found");
                return(1);
            }

            var chart = charts.Single();
            var query = chart.Queries.Single();

            var signal = Intersect(
                _signal.Signal,
                dashboard.SignalExpression,
                chart.SignalExpression,
                query.SignalExpression);

            TimeSpan?timeGrouping = null;

            if (_intervalDuration != null)
            {
                timeGrouping = DurationMoniker.ToTimeSpan(_intervalDuration);
            }

            DateTime rangeStart, rangeEnd;

            if (_range.Start.HasValue)
            {
                rangeStart = _range.Start.Value;
                // ReSharper disable once PossibleInvalidOperationException
                rangeEnd = _range.End.Value;
            }
            else
            {
                // Note, this is local time.
                rangeEnd = DateTime.Now;
                var last = DurationMoniker.ToTimeSpan(_lastDuration);
                rangeStart = rangeEnd - last;
                if (timeGrouping.HasValue)
                {
                    if (timeGrouping.Value >= TimeSpan.FromDays(1))
                    {
                        rangeStart = new DateTime(rangeStart.Year, rangeStart.Month, rangeStart.Day, 0, 0, 0, DateTimeKind.Local);
                    }
                    else if (timeGrouping.Value >= TimeSpan.FromHours(1))
                    {
                        rangeStart = new DateTime(rangeStart.Year, rangeStart.Month, rangeStart.Day, rangeStart.Hour, 0, 0, DateTimeKind.Local);
                    }
                    else if (timeGrouping.Value >= TimeSpan.FromMinutes(1))
                    {
                        rangeStart = new DateTime(rangeStart.Year, rangeStart.Month, rangeStart.Day, rangeStart.Hour, rangeStart.Minute, 0, DateTimeKind.Local);
                    }
                    else
                    {
                        rangeStart = new DateTime(rangeStart.Year, rangeStart.Month, rangeStart.Day, rangeStart.Hour, rangeStart.Minute, rangeStart.Second, DateTimeKind.Local);
                    }
                }
            }

            var q = BuildSqlQuery(query, rangeStart, rangeEnd, timeGrouping);

            var timeout = _timeout.ApplyTimeout(connection.Client.HttpClient);

            if (_output.Json)
            {
                var result = await connection.Data.QueryAsync(q, signal : signal, timeout : timeout);

                // Some friendlier JSON output is definitely possible here
                Console.WriteLine(JsonConvert.SerializeObject(result));
            }
            else
            {
                var result = await connection.Data.QueryCsvAsync(q, signal : signal, timeout : timeout);

                _output.WriteCsv(result);
            }

            return(0);
        }