На работе внедрили 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, поэтому нужно его проинитить:
Теперь установим модуль perl для работы с Jira:
Все что нужно уже есть, можно создавать скриптик:
#!/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
Если не стоит, установим:
Создаем конфиг, примеры можно найти в инете на любой вкус, у меня такой (второй скрипт относительно почты, я упоминал о том что почту тоже хочу мониторить):
# 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
Получаем вот такой результат на десктопе в правом нижнем углу:

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