Documentation

Build Status Latest Version

Powny Cli

Powny command line tools облегчает взаимодействие с Powny API, а так же позволяет проверять работу правил локально.

Установка

Зависимости:

Ubuntu

sudo apt-get install python3-pip

OS X

Если у вас стоит brew:

brew install python3

В противном случае, python3 можно скачать с сайта.

Так же необходимо поставить pip3:

curl -OL https://raw.github.com/pypa/pip/master/contrib/get-pip.py
sudo python3 get-pip.py

Установка powny-cli

На любой системе достаточно выполнить:

pip3 install powny-cli

Для возможности выполнять правила локально надо установить пакет powny-yans:

pip3 install --extra-index-url http://pypi.yandex-team.ru/simple powny-yans

Утилита тянет с собой не мало зависимостей (в основном, для локального выполнения правил), будьте к этому готовы

Подготовка к работе

Что бы начать работать с powny-cli выполните:

  • git clone ${git_url} ${target_path}

  • cd ${target_path}

  • git checkout ${branch} (опционально, если правила для целевой инсталяции powny лежат не в master ветке)

После этого powny-cli будет использовать настройки, которые определены в файле ${target_path}/pownyrules.yaml.

Что умеет powny-cli

Загрузить новые или изменённые правила в Powny

  • Склонируйте репозиторий с правилами:
$ git clone git@github.example-team.ru:alexanderk/powny-load-test-rules.git
$ cd powny-test-rules
  • Внесите необходимые изменения:
$ vim rules/on_event_bar.py
  • Чтобы загрузить правила в Powny, выполните:
$ powny rules upload

Эта команда пытается синхронизировать ваши изменения с удалённым репозиторием правил, с которым вы работаете. А после - загружает правила в powny.

Output:

INFO:pownycli.client:Upload updated rules to Powny...
INFO:pownycli.uploader:Commit current changes...
INFO:pownycli.uploader:Pull changes from rules server...
INFO:pownycli.uploader:Sync you changes with rules server...
INFO:pownycli.uploader:Upload rules to ssh://git@powny-testing.example.net:2022/var/lib/powny/rules.git...
INFO:pownycli.pownyapi:Set new head: 2238e6636063b57b541c0f1799596e1617dec489
INFO:pownycli.uploader:You rules uploaded to Powny!

Выполнить правило локально

Пусть, репозиторий с правилами находится в директории ./powny-rules и описание события в event.json.

Убедитесь, что event.json в правильном формате, например:

$ cat event.json
{"host":"foo", "service":"100", "status":"CRIT", "description":"test"}

Чтобы выполнить правило запустите:

$ powny rules exec -e event.json

Output:

DEBUG:raava.handlers:Loading rules from head: ; root: /home/cloud-user/powny-cli-test/powny-rules
DEBUG:raava.handlers:Scanning for rules: rules/on_event_bar.py
DEBUG:raava.handlers:Loaded on_event handler from <module 'rules.on_event_bar' from '/home/cloud-user/powny-cli-test/powny-rules/rules/on_event_bar.py'>
DEBUG:raava.handlers:Scanning for rules: rules/on_event_foo_3.py
DEBUG:raava.handlers:Loaded on_event handler from <module 'rules.on_event_foo_3' from '/home/cloud-user/powny-cli-test/powny-rules/rules/on_event_foo_3.py'>
DEBUG:raava.handlers:Scanning for rules: rules/on_event_foo_2.py
DEBUG:raava.handlers:Loaded on_event handler from <module 'rules.on_event_foo_2' from '/home/cloud-user/powny-cli-test/powny-rules/rules/on_event_foo_2.py'>
DEBUG:raava.handlers:Scanning for rules: rules/on_event_foo.py
DEBUG:raava.handlers:Loaded on_event handler from <module 'rules.on_event_foo' from '/home/cloud-user/powny-cli-test/powny-load-test-rules/rules/on_event_foo.py'>
DEBUG:raava.rules:Applied: 0a8e1c3c-b573-4688-9a67-d9f35d56496e --> rules.on_event_foo_3.on_event
DEBUG:raava.rules:Applied: 0a8e1c3c-b573-4688-9a67-d9f35d56496e --> rules.on_event_foo_2.on_event
DEBUG:raava.rules:Applied: 0a8e1c3c-b573-4688-9a67-d9f35d56496e --> rules.on_event_foo.on_event
DEBUG:raava.rules:Event 0a8e1c3c-b573-4688-9a67-d9f35d56496e/host: not matched with <cmp eq(bar)>; handler: rules.on_event_bar.on_event
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): example.com
DEBUG:requests.packages.urllib3.connectionpool:"GET / HTTP/1.1" 200 1270
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): example.com
DEBUG:requests.packages.urllib3.connectionpool:"GET / HTTP/1.1" 200 1270
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): powny-testing.example.net
DEBUG:requests.packages.urllib3.connectionpool:"GET / HTTP/1.1" 200 226
DEBUG:pownyhelpers.output.via_email:Sending email to: ['alexanderk@example-team.ru']; cc: []; via SMTP None@localhost
INFO:pownyhelpers.output.via_email:Email sent to: ['alexanderk@example-team.ru']; cc: []

Для проверки правил основанных на изменении статуса, используйте JSON файл со списком правил (см. multi_event_example.json).

Получить информацию о Powny-кластере

$ powny cluster-info

Output:

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): powny-testing.example.net
{'collector': {'96365003-b273-46a5-b4c6-8ee984a91c2a@powny-collector-localship': {'host': {'fqdn': 'powny-collector-localship',
                                                                                         'node': 'powny-collector-localship'},
                                                                                'threads': {'die_after': None,
                                                                                            'respawns': 1,
                                                                                            'workers_limit': 1},
                                                                                'when': '2014-07-29T11:10:55Z'}},
 'splitter': {'0f8ee3be-9148-49fd-bb20-ea3e65b0a590@powny-splitter-localship': {'host': {'fqdn': 'powny-splitter-localship',
                                                                                       'node': 'powny-splitter-localship'},
                                                                              'loader': {'last_commit': '33a72fe756df6834f78bc2916651dfba2896d03f',
                                                                                         'last_head': 'git_33a72fe756df6834f78bc2916651dfba2896d03f',
                                                                                         'rules_dir': '/var/lib/powny/rules'},
                                                                              'threads': {'die_after': None,
                                                                                          'respawns': 1,
                                                                                          'workers_limit': 1},
                                                                              'when': '2014-07-29T11:10:53Z'}},
 'worker': {'d6f2b259-433b-4d60-b205-33b9867a2f65@powny-worker-localship': {'host': {'fqdn': 'powny-worker-localship',
                                                                                   'node': 'powny-worker-localship'},
                                                                          'threads': {'die_after': None,
                                                                                      'respawns': 1,
                                                                                      'workers_limit': 1},
                                                                          'when': '2014-07-29T11:10:55Z'}}}

Получить список активных заданий

$ powny job list

Остановить задачу по UUID

$ powny job kill _JOB_UUID_

Послать событие в Powny

Если событие простое (состоит из полей host, service, status), то описание может быть переданно как аргументы:

$ powny job send-event http://example.com golem CRIT

Так же, событие может быть описано в файле, который задаётся опцией --file:

$ powny job send-event --file event.json

Output:

INFO:pownycli.client:Send event: {'host': 'http://example.com', 'service': 'golem', 'status': 'CRIT'}
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): powny-testing.example.net
INFO:pownycli.pownyapi:New event posted. Job Id: ec975edd-5403-44f1-8997-96d3caa8f82d

Настройка

При установке с пакетом поставляется конфиг по умолчанию (сейчас используется только для настроек логгирования). Чтобы внести изменения в конфигурацию, необходимые опции можно переписать в файле ~/.config/powny-cli/config.yaml, или передать опцию powny --config=my_config.yaml.

Можно использовать опцию --debug для более подробного вывода. По умолчанию, уровень логгирования INFO.

Опции, предназначенные для файлов, могут быть выставленны в -, в таком случае, вместо файла будет читаться stdin.

Например:

cat event.json |  powny powny --api-url=http://powny-testing.example.net send-event --file -