提交 27c0dba7 编写于 作者: K kezhenxu94 提交者: wu-sheng

Add command manual and documentations (#8)

* Add command manual and ˆdocumentation

* Rename GitHub Action and display build status and coverage badge

* Update documentation to add developer guide and polishing
上级 d2bac718
......@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
name: Go
name: Build
on: [push, pull_request]
jobs:
......
Apache SkyWalking CLI
===============
![](https://github.com/apache/skywalking-cli/workflows/Build/badge.svg?branch=master)
![](https://codecov.io/gh/apache/skywalking-cli/branch/master/graph/badge.svg)
<img src="http://skywalking.apache.org/assets/logo.svg" alt="Sky Walking logo" height="90px" align="right" />
The CLI (Command Line Interface) for [Apache SkyWalking](https://github.com/apache/skywalking).
......@@ -8,11 +11,111 @@ The CLI (Command Line Interface) for [Apache SkyWalking](https://github.com/apac
SkyWalking CLI is a command interaction tool for the SkyWalking user or OPS team, as an alternative besides using browser GUI.
It is based on SkyWalking [GraphQL query protocol](https://github.com/apache/skywalking-query-protocol), same as GUI.
# Install
As SkyWalking CLI is using `Makefile`, compiling the project is as easy as executing a command in the root directory of the project.
```shell
git clone https://github.com/apache/skywalking-cli
cd skywalking-cli
make clean && make
```
and copy the `./bin/swctl` to your `PATH` directory, usually `/usr/bin/` or `/usr/local/bin`, or you can copy it to any directory you like,
and add that directory to `PATH`.
# Commands
TODO
Commands in SkyWalking CLI are organized into two levels, in the form of `swctl --option <level1> --option <level2> --option`,
there're options in each level, which should follow right after the corresponding command, take the following command as example:
```shell
$ swctl --debug service list --start="2019-11-11" --end="2019-11-12"
```
where `--debug` is is an option of `swctl`, and since the `swctl` is a top-level command, `--debug` is also called global option,
and `--start` is an option of the third level command `list`, there is no option for the second level command `service`.
Generally, the second level commands are entity related, there're entities like `service`, `service instance`, `metrics` in SkyWalking,
and we have corresponding sub-command like `service`; the third level commands are operations on the entities, such as `list` command
will list all the `service`s, `service instance`s, etc.
## Common options
There're some common options that are shared by multiple commands, and they follow the same rules in different commands,
### `--start`, `--end`
`--start` and `--end` specify a time range during which the query is preformed,
they are both optional and their default values follow the rules below:
- when `start` and `end` are both absent, `start = now - 30 minutes` and `end = now`, namely past 30 minutes;
- 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`;
- 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`;
- 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`;
## All available commands
This section covers all the available commands in SkyWalking CLI and their usages.
- [`swctl`](#swctl-top-level-command)
- [`service`](#service-second-level-command) (second level command)
- [`list`, `ls`](#service-list---startstart-time---endend-time)
### `swctl` top-level command
`swctl` is the top-level command, which has some options that will take effects globally.
| option | description | default |
| :--- | :--- | :--- |
| `--config` | from where the default options values will be loaded | `~/.skywalking.yml` |
| `--debug` | enable debug mode, will print more detailed information at runtime | `false` |
| `--base-url` | base url of GraphQL backend | `http://127.0.0.1:12800/graphql` |
| `--display` | display style when printing the query result, supported styles are: `json`, `yaml`, `table` | `json` |
### `service` second-level command
`service` second-level command is an entry for all operations related to services,
and it also has some options and third-level commands.
#### `service list [--start=<start time>] [--end=<end time>]`
`service list` lists all the services in the time range of \[`start`, `end`\].
| option | description | default |
| :--- | :--- | :--- |
| `--start` | See [Common options](#common-options) | See [Common options](#common-options) |
| `--end` | See [Common options](#common-options) | See [Common options](#common-options) |
# Developer guide
## Compiling and building
Clone the source code and simply run `make clean && make` in the source directory,
this will download all necessary dependencies and build a binary file in `./bin/swctl`.
```shell
make clean && make
```
## Writing a new command
All commands files locate in directory [`commands`](commands), and an individual directory for each second-level command,
an individual `go` file for each third-level command, for example, there is a directory [`service`](commands/service) for command `swctl service`,
and a [`list.go`](commands/service/list.go) file for `swctl service list` command.
Determine what entity your command will operate on, and put your command `go` file into that directory, or create one if it doesn't exist,
for example, if you want to create a command to `list` all the `instance`s of a service, create a directory `commands/instance`,
and a `go` file `commands/instance/list.go`.
## Reusing common options
There're some [common options](#common-options) that can be shared by multiple commands, check [`commands/flags`](commands/flags)
to get all the shared options, and reuse them when possible, an example shares the options is [`commands/service/list.go`](commands/service/list.go#L35)
## Running tests
Before submitting a pull request, add some test code to test the added/modified codes,
and run the tests locally, make sure all tests passed.
# Compiling project
TODO
```shell
go test -v ./...
```
# License
[Apache 2.0 License.](/LICENSE)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册