blob: 1e3793a9e8c6c7942096e174306d409acc4ce9c7 [file] [log] [blame]
// Licensed to Apache Software Foundation (ASF) under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Apache Software Foundation (ASF) licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package flags
import (
"github.com/urfave/cli/v2"
api "skywalking.apache.org/repo/goapi/query"
"github.com/apache/skywalking-cli/internal/model"
)
var startEndUsage = `"start" and "end" specify a time range during which the query is preformed,
they can be absolute time like "2019-01-01 12", "2019-01-01 1213", or relative time (to the
current time) like "-30m", "30m". They are both optional and their default values follow the rules below:
1. when "start" and "end" are both absent, "start = now - 30 minutes" and "end = now",
namely past 30 minutes;
2. when "start" and "end" are both present, they are aligned to the same precision by
truncating the more precise one, e.g. if "start = 2019-01-01 1234, end = 2019-01-01 18",
then "start" is truncated (because it's more precise) to "2019-01-01 12", and "end = 2019-01-01 18";
3. when "start" is absent and "end" is present, will determine the precision of "end"
and then use the precision to calculate "start" (minus 30 units), e.g. "end = 2019-11-09 1234",
the precision is "MINUTE", so "start = end - 30 minutes = 2019-11-09 1204",
and if "end = 2019-11-09 12", the precision is "HOUR", so "start = end - 30HOUR = 2019-11-08 06";
4. when "start" is present and "end" is absent, will determine the precision of "start"
and then use the precision to calculate "end" (plus 30 units), e.g. "start = 2019-11-09 1204",
the precision is "MINUTE", so "end = start + 30 minutes = 2019-11-09 1234",
and if "start = 2019-11-08 06", the precision is "HOUR", so "end = start + 30HOUR = 2019-11-09 12".
Examples:
1. Query the metrics from 20 minutes ago to 10 minutes ago
$ swctl metrics linear --name=service_resp_time --service-name business-zone::projectB --start "-20m" --end "-10m"
2. Query the metrics from 1 hour ago to 10 minutes ago
$ swctl metrics linear --name=service_resp_time --service-name business-zone::projectB --start "-1h" --end "-10m"
3. Query the metrics from 1 hour ago to now
$ swctl metrics linear --name=service_resp_time --service-name business-zone::projectB --start "-1h" --end "0m"
4. Query the metrics from "2021-10-26 1047" to "2021-10-26 1127"
$ swctl metrics linear --name=service_resp_time --service-name business-zone::projectB --start "2021-10-26 1047" --end "2021-10-26 1127"`
// DurationFlags are healthcheck flags that involves a duration, composed
// by a start time, an end time, and a step, which is commonly used
// in most of the commands
var DurationFlags = []cli.Flag{
&cli.StringFlag{
Name: "start",
Usage: startEndUsage,
},
&cli.StringFlag{
Name: "end",
Usage: `end time of the query duration. Check the usage of "start"`,
},
&cli.GenericFlag{
Name: "step",
Usage: `time step between start time and end time, should be one of SECOND, MINUTE, HOUR, DAY`,
Value: &model.StepEnumValue{
Enum: api.AllStep,
Default: api.StepMinute,
Selected: api.StepMinute,
},
},
&cli.StringFlag{
Name: "duration-type",
Usage: "the type of duration",
Hidden: true,
},
}