Automatisierung und Integration von Request Tracker Systemen mittels REST-Schnittstelle Stefan Hornburg Perlworkshop 2008
split() ● Request Tracker ● REST-Schnittstelle ● Automatisierung ● Integration
Kunden ● Deutschland: ecoservice.de, Wegatrade ● Schweiz: cobolt.net ● Österreich: Embassy Vienna ● USA: WebHostNY, L&D Computer Consulting ●...
Organisation ● Projekte ● Aufgaben ● Arbeitszeit ● Übersicht ● Abrechnung ● History
Request Tracker ● Trouble Ticket System ● Erweiterbarkeit ● Schnittstellen ● Perl
Verteilte RT-Installation ● WebHostNY ● Embassy Vienna ● LinuXia: Hosting + Kunden ● L & D Computer ● ICDEVGROUP
Problemstellung ● fehlende Übersicht wegen verteilter Installation ● verschiedene Policys (Prioritäten)
Integration und Automatisierung ● Zusammenführung und Bewertung ● Automatisierung durch Schnittstellen
Request Tracker: Schnittstellen ● Web ● ● RT API ● REST
Representational State Transfer ● Ressourcen ● Adressierbarkeit ● Zustandslosigkeit ● Operationen – GET, POST, PUT, DELETE
Request Tracker: Ressourcen ● Tickets ● Queues ● Benutzer ● Benutzergruppen
Ressourcen und Aktionen ● list: Auflistung/Suche ● show: Anzeige von Eigenschaften ● create: Anlegen von Objekten ● edit: Bearbeitung von Objekten ● correspond ● comment
Realisierung ● Dokumentation Fehlanzeige => RTSL ● Kommandozeilentool /usr/bin/rt ● RTDEBUG=3 /usr/bin/rt ● LWP::UserAgent ● eigene Routinen zum Parsen
Kommandozeile I Neue Queue: $ rt create -t queue set name='Perl-Workshop' # Queue 4 created. Neues Ticket: $ rt create -t ticket set subject='Ausarbeitung des Vortrags' \ set queue='Perl-Workshop' # Ticket 11 created.
Kommandozeile II Ticket anzeigen: $ rt show ticket/11 -f id,subject,queue,requestors,owner id: ticket/11 Subject: Ausarbeitung des Vortrags Queue: Perl-Workshop Requestors: Owner: Nobody
Kommandozeile III Ticket bearbeiten: $ rt correspond -m 'Ausarbeitung ist fast fertig, siehe Anhang.' \ -a article_racke.tex ticket/11 # Message recorded
Aufbau der URI my ($uri, $user, $password); # URL der RT-Instanz $uri = ' $uri.= '/REST/1.0'; # Ressource $uri.= '/search/ticket'; # Authentifizierung $user = 'racke'; $password = 'nevairbe';
LWP::UserAgent use LWP::UserAgent; my ($ua, $req, $ua = new LWP::UserAgent(agent => 'Perlworkshop/10.0', env_proxy => 1); user => $username; pass => $password; $req = POST($uri, Content_Type => 'form- data'); $res = $ua->request($req)
Auswertung der Antwort ● HTTP-Header ● HTTP/ OK ● HTTP-Body ● RT-Header ● RT/ OK ● RT-Body
Beispiel RT-Antwort RT/ Ok id: user/22 Name: racke Address: RealName: Stefan Hornburg NickName: Racke
Verarbeitung RT-Antwort ● Kommentare ● Fortsetzungszeilen ● Listen von Objekten ● Attachments ● History
Integration mit Interchange ● Bugtracker für Interchange ● Businesstool
Interchange ● eCommerce- und Applikationsserver ● Perl ● Templatesprache ITL [total-cost] ● eingebettetes Perl [perl]..[/perl] ● Erweiterungen durch UserTags und Module
ITL: Usertags I UserTag rt Order function type id UserTag rt Routine <<EOR sub {.... return $content; } [rt show user racke] [perl] $Tag->rt('show', 'user', 'racke'); [/perl]
ITL: Usertags II UserTag rt AddAttr [rt function=list type=ticket queue=Perl- Workshop] UserTag rt HasEndTag [rt function=correspond id=12] Der Vortrag ist bald zu Ende. [/rt] [perl] $Tag->rt({function => 'correspond', id => 12, body => 'Der Vortrag ist bald zu Ende'}); [/perl]
Einbindung von Modulen require module Vend::RT UserTag rt MapRoutine Vend::RT::rt
Vend::RT package Vend::RT; use LWP; use use Vend::Config; use Vend::Tags; Vend::Config::parse_tag('UserTag', 'rt Order function type id'); Vend::Config::parse_tag('UserTag', 'rt AddAttr'); Vend::Config::parse_tag('UserTag', 'rt MapRoutine Vend::RT::rt'); Vend::Config::parse_tag('UserTag', 'rt HasEndTag'); sub rt { my ($function, $type, $id, $opts, $body)
REST-Konformität Zitat von Jesse Vincent: In my defense, when the REST interface got designed, everyone else on the planet was just starting to use SOAP and Roy Fielding barely published his definitions of what REST was. It wasn't well understood by anybody.
Ausblick ● Suche für alle Ressourcen ● strengere Einhaltung der REST-Kriterien ● Caching ● Einbindung anderer Ticketsysteme
Abspann Thanks !