Генерация описаний дашбордов для Графита/Графаны

### Штатная работа

Список всех дашбордов по тегу direct:

make list-dashboards

или
curl -s 'https://ppcgraphite.yandex.ru/grafana/api/search?tag=direct' |jq .


Синхронизовать дашборды:

make 


Сгенерировать json'ы для отправки в Grafana, но не отправлять:

make generate-requests


Отправить готовые сгенерированные json'ы в Графану: 

make upload


Удалить временные файлы с запросами:

make clean



### Что где хранится

tmpl -- шаблоны для умолчального оформления дашборда
conf -- описания дашбордов; из них в соответствии с tmpl будут генерироваться описания дашбордов для Графаны
dashboards -- готовые описания дашбордов; отправляются в Графану почти "как есть", только добавляется тег auto

requests -- временные файлы с запросами для Графаны; коммитить и хранить не надо

### Нерегулярное и нестандартное

#### Добавить дашборд

 * Создать дашборд руками в Графане
 * взять его id (можно из списка через api)
 * написать файл conf/nnn.conf.yaml по аналогии с другими. ВАЖНО: указать id дашборда
 * синхронизовать дашборды


#### Перенести дашборд из Графита

Сохранить json-описание дашборда в файл

Чистый список заголовков и метрик:
cat direct-profile.json |jq '.rows[] | .panels[] | [{title: .title}], .targets | .[] |.title // .target'

сразу YAML:
cat direct-profile.json |jq -c '.rows[] | .panels[] | {title: .title, target: [(.targets[] | .target)]}' |perl -MJSON -MYAML -le 'print YAML::Dump(from_json("[".join(",", <>)."]"));'

cat direct-profile.json |jq -c '.rows[] | .panels[] | {title: .title, target: [(.targets[] | .target)]}' |perl -MJSON -MYAML -le 'print YAML::Dump({id => "TODO", _title => "TODO", _tags => ["direct"], rows => from_json("[".join(",", <>)."]")});'


добавить id, title, tags (из _title, _tags убрать подчеркивание) для всего дашборда 


#### Разное

Скачать json-описание дашборда: 
curl -s 'https://ppcgraphite.yandex.ru/grafana/api/dashboards/db/direct-api-timings-copy' |jq . > dashboards/api-timings.json

подготовить запрос для обновления дашборда:
./generate-grafana-dashboard.pl conf/ppcdata-templated.yaml >requests/ppcdata-templated.json


curl -k -H "Content-Type: application/json" --cookie "grafana_sess=5bbb40c374985f9f" -X POST -d @requests/ppcdata.json https://ppcgraphite02f.yandex.ru/grafana/api/dashboards/db
{"slug":"direct-ppcdata","status":"success","version":7}

curl -k -H "Content-Type: application/json" --cookie "grafana_sess=5bbb40c374985f9f" -X POST -d @requests/ppcdata.json https://ppcgraphite.yandex.ru/grafana/api/dashboards/db 

curl -k -H "Content-Type: application/json" -X POST -d @requests/ppcdata.json https://ppcgraphite.yandex.ru/grafana/api/dashboards/db


### TODO

  * скрипт и конфиги -- отдельно
  * ленивое пересоздание дашборда (не отправлять, если уже совпадает)
  * выборочное пересоздание только одного/нескольких дашбордов
  * создание нового дашборда и получение его id
  * показывать "лишние" дашборды (с главным тегом, но к-рых нет в конфигах)
  * вообще показывать дифф конфига и Графаны
  * более удобный список дашбордов
  * скачать дашборд из Графаны по id
  * verbose: показывать все http-запросы к Графане
  * не создавать временные файлы в текущем каталоге


grafanerator list -d /dir
grafanerator status -d /dir
    что только локально, что только удаленно
grafanerator upload -d /dir
grafanerator upload direct-api-monitoring
grafanerator new 

