[Ненормальное программирование, SQL, PowerShell, Microsoft SQL Server, Администрирование баз данных] Email Chart — это вам не ASCII Art

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
26-Мар-2021 16:30

По роду моей деятельности я всегда нахожусь между различными подразделениями - у меня в email даже нет подписи, кто я, потому что я сам не знаю, кем являюсь. Недавно я автоматизировал доставку performance metrics SQL server с PROD девелоперам. Конкретная информация (SQL performance metrics) не важна, вы можете делать такое для любой информации, и даже рисовать графы. Графики отправляются по почте и выглядят примерно так в окне письма в outlook:
Но прежде чем я продолжу, давайте дадим слово моему воображаемому оппоненту, зумеру-хипстеру, вот он спешит высказаться:
Мужик! Графики по почте? Что, cерьезно? Web интерфейс, интерактивность, Grafana - "нет, не слышал"? Ты бы еще звездочками графики нарисовал бы в письме, ASCII art-ом.Конечно, мой воображаемый оппонент абсолютно прав в идеальном, воображаемом мире. Это вам подтвердит любой пролетающий там розовый единорог. Однако, если мы не в стартапе, а в кровавом enterprise, то все не так розово.Во-первых, доступ к серверам PRODUCTION в кровавом Enterprise варьируется от затрудненного до параноидального (например, CA PAM с возможностью зайти на сервер только если есть открытый инцидент на вас, при этом copy/paste блокирован). Есть еще более параноидальный вариант - через митинг и экран, когда можно говорить что делать, но набирает другой человек.Во-вторых, что вы там хотели поставить, Grafana? На отдельном сервере, понятно. Давайте и напишем "прошу выделить сервер с доступом ко всем SQL серверам на PROD для таких то нужд". Опять-таки, в зависимости от параноидальности компании вы можете получить желаемый сервер примерно через месяц, два (если вам будет активно помогать менеджмент в борьбе против security team) или никогда. Кроме того, если вы хоститесь on-prem, то вам могут дать виртуалочку, так уж и быть. Если же речь идет об AWS (а мы речь ведем о PROD), то это запрос на машинку, где будут поля Department и Billing Code, и потребуют реальные деньги. Нет, дело не в сумме. Выделить сотни тысяч долларов на какую нибудь фигню для Enterprise элементарно, а вот пару сотен в месяц для Васи Пупкина - извините.Наконец, формат email очень совместим с менеджментом. Менеджер не будет думать, под каким логином заходить на Grafana и куда там кликать, а потом делать screenshots. То ли дело мыло - его легко отфорвардить или прикрепить к митингу. Вас даже могут попросить сделать отчет регулярным, чтобы он автоматически отправлялся менеджеру на почту раз в день или неделю (через три месяца мы можете это отключить - менеджер давно перенаправил надоевший отчет в Junk правилом и забыл про него)В итоге приходится прососаться к серверу с максимально открытой connectivity к другим (такие, как правило, есть, но к ним сильно лимитирован доступ), как правило, такие сервера связаны с deploy (Jenkins, Octopus etc). Особо много там не развернешь - надо вести себя там скромно. Вряд ли кто смотрел старый мультик, но придется сослаться на Филиаса Фога:
"А теперь - слайды" (c) Итак, я зацепился за существующий Jenkins server, создав Job:
Jenkins используется просто как оболочка вызова powershell (да, powershell можно прекрасно использовать и под Linux!) и бесхитростно передает все параметры скрипту. Вся информация по performance у меня в одной плоской таблице, и выводится по колонкам. Графики рисуются примерно так:
makeChart $find @('3Read latency, microseconds','2Write Latency, microseconds') 'IO latency' 'Time' 'Times in microseconds' 'latency'
В $find находится data set, вычитанный на нужную дату и диапазон времени. Названия колонок предваряет код цвета. Смотрим процедуру makeChart:
# Xgraph colors
# 2 = red, 3 = blue, 4 = green, 5 = violet, 6 = orange, 7 = yellow, 8 = pink, 9 = cyan
function makeChart($ds, $cols, $title, $titleX, $titleY, $pngname)
{
  Out-File -FilePath $workfile -Force -Encoding ascii
  "Title = $title" | Add-Content $workfile
  "title_x = $titleX" | Add-Content $workfile
  "title_y = $titleY" | Add-Content $workfile
  $maxval = 0
  foreach ($c in $cols)
    {
    $colname = $c.Substring(1)
    $colch = $c[0]
    "color = $colch" | Add-Content $workfile
    $secf = -1
    foreach ($r in $find) {
      $val = $r[$colname]
      if ($val -gt $maxval) { $maxval = $val }
      if ($secf -lt 0) { $secf = $r.sec }
      $secl = $r.sec
      "$secl $val" | Add-Content $workfile
    }
  "NEXT" | Add-Content $workfile
  }
  $maxval = $maxval * 1.03
Я там скрыл две последние строки - о них пойдет речь дальше. Что мы вообще делаем здесь? Мы составляем текстовое задание для пакетного рисовальщика картинок Xgraph. Утилитка старая и графики выглядят на уровне 90х годов, кроме того, она не понимает Unicode (-Encoding ascii). Неудивительно - развитие таких утилит остановилось, но иногда они очень полезны! Итак, файл готов. Вызываем Xgraph:
&D:\Apps\Xgraph\bin\xgraph.exe $workfile -pdf -hms -x_range $secf $secl -y_range 0 $maxval -out_file $pdf
Указываем входной файл, диапазон по y, по x (секунды как целое от начала суток), рисуем и время как время (-hms) и увы... вывод только в pdf и подобные форматы. Их можно приложить как attachment, но это некрасиво, нам хочется поместить картинку в тело письма. Придется скачать Poppler и конвертировать pdf в png.
&D:\Apps\poppler\bin\pdftoppm -png $pdf $pngname
Теперь тело письма будет выглядеть примерно так:
Здесь снова экстремальное программирование - у нас есть голый и чистый HTML почтового разлива - без CSS, javascript и вообще без всего. Обратите внимание, что png имеет в имени '-1', это первая страница (она же в данном случае единственная).Есть еще одна утилитка подобного плана, она позволяет рисовать графы по их текстовому описанию: graphviz. Она уже может непосредственно выводить в png и jpg:
Это пример, как уже в другой job я возвращаю пользователям lock graph.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_nenormalnoe_programmirovanie (Ненормальное программирование), #_sql, #_powershell, #_microsoft_sql_server, #_administrirovanie_baz_dannyh (Администрирование баз данных), #_powershell, #_sql, #_ms_sql, #_outlook, #_performance, #_grapviz, #_xgraph, #_poppler, #_enterprise, #_nenormalnoe_programmirovanie (
Ненормальное программирование
)
, #_sql, #_powershell, #_microsoft_sql_server, #_administrirovanie_baz_dannyh (
Администрирование баз данных
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 16:16
Часовой пояс: UTC + 5