Simple Desktop Notifications Jira/Mail: Conky + Perl

На работе внедрили Jira — это такой мега продукт для управления проектами, тиками, багами он же вики и тд и тп … Я как админ там восновном работаю с тикетами которые на меня сыпятся со всех сторон. Но беда в том что софтина web-овская и для человека сидящего целыми днями в консоли не очень удобно держать отдельную вкладку с Jira в браузере и постоянно туда заглядывать. В Jira есть нотификейшены в почту, но опять же, почта web-овская: браузер -> вкладка -> смотреть-смотреть …. не удобно 🙂
Решил сделать себе няшную уведомлялку на десктоп для Jira (интересуют открытые тикеты назначенные на меня), а заодно и для почты (Интересует непрочитанные сообщения в директории INBOX) 🙂 Она же тоже вебовская … зараза.
Jira имеет очень богатый API, он же REST, через который можно совершать любые манипуляции с тикетами: создавать, комментировать, закрывать, переназначать … Но мне многого не надо, всего то отобразить на desktop количество заявок которые «висят на мне».
Есть готовые скрипты для работы с Jira использующие Jira REST. Варианты самые разнообразные как по функционалу так и по языкам: на ruby, python, perl. Я выбрал последний, так как более-менее ориентируюсь в перловке.

Если Jira работает по HTTPS (у нас именно так) то нужны библиотеки для работы с SSL. Их можно установить из репозиториев Linux, у себя в Debian 8 я сделал так:

# apt-get install libssl-dev

Первый раз на рабочей тачке использую Perl CPAN, поэтому нужно его проинитить:

# cpan App::cpanminus​

Теперь установим модуль perl для работы с Jira:

# cpanm JIRA::REST

Все что нужно уже есть, можно создавать скриптик:

#!/usr/bin/env perl

use JIRA::REST;

   my $jira = JIRA::REST->new('https://jira.mycompany.ua', '_my_login_', '_jira_pass_here_');

# Iterate on issues
   my $search = $jira->POST('/search', undef, {
    jql        => 'assignee = "_my_login_" and status != "done"',
    startAt    => 0,
    maxResults => 10,
    fields     => [ qw/summary status assignee/ ],
   });

my $issues_counter = 0;

   foreach my $issue (@{$search->{issues}}) {
    ++$issues_counter;
   }

print "$issues_counter\n";

Сохраняем куда хотите и даем права на выполнение:

# chmod +x /home/some/path/jira_api.pl

Результатом его работы является целое десятичное число заявок которые назначены на _my_login_ и в состоянии «!= done»
Вот пример выполнения:

$ /home/some/path/jira_api.pl​
2
$​

Теперь для отображения на десктопе используем conky
Если не стоит, установим:

# apt-get install conky

Создаем конфиг, примеры можно найти в инете на любой вкус, у меня такой (второй скрипт относительно почты, я упоминал о том что почту тоже хочу мониторить):

# Conky settings #

background no
update_interval 5
double_buffer yes
no_buffers yes

# Window specifications #
own_window yes
own_window_type desktop
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_title
own_window_colour black
own_window_argb_visual yes
own_window_argb_value 200

minimum_size 200

# Alignment #
alignment br
gap_x 20
gap_y 50

border_inner_margin 15
border_outer_margin 0

# Graphics settings #
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no

# Text settings #
# Шрифт выбирайте на свой вкус
use_xft yes
xftalpha 0
xftfont Audiowide:size=10
#xftfont Open Sans Light:size=11

# Color scheme #
default_color 666666

color1 0099CC
color2 9933CC
color3 669900
color4 FF8800
color5 CC0000
color6 AAAAAA
color7 DDDDDD

TEXT
$font${color7}Jira Tickets: $font${color1}${execi 120 /home/some/path/jira_api.pl} $font${color7}|| $font${color7}Mail Inbox: $font${color1}${execi 120 /home/some/path/mail_imaps_v2.pl}

Вот листинг скрипта для отображения непрочитанных почтовых сообщений по IMAP (unread, INBOX). Скрипт не мой, нашелся гдето в инете:

#!/usr/bin/env perl

# gimap.pl by gxmsgx
# description: get the count of unread messages on imap

use strict;
use warnings;
use Mail::IMAPClient;
use IO::Socket::SSL;

my $username = 'my_email@company.ua';
my $password = '_my_mail_passwd_';

my $socket = IO::Socket::SSL->new(
  PeerAddr => 'webmail.company.ua',
  PeerPort => 993
 )
 or die "socket(): $@";

my $client = Mail::IMAPClient->new(
  Socket   => $socket,
  User     => $username,
  Password => $password,
 )
 or die "new(): $@";

if ($client->IsAuthenticated()) {
   my $msgct;

   $client->select("INBOX");
   $msgct = $client->unseen_count||'0';
   print "$msgct\n";
}

$client->logout();

И запускаем conky с такими параметрами:

$ conky -d -c /home/some/.conky_line

Получаем вот такой результат на десктопе в правом нижнем углу:
Conky - Jira and Mail

Не забудьте добавить в автостарт своего dm conky.

Хай щастить!

  1. Комментов пока нет

  1. Трэкбэков пока нет.

Why ask?