class TestOTRSAPI(TestCase): def setUp(self): self.c = GenericTicketConnector(OTRS_SERVER, OTRS_WEBSERVICE) self.c.register_credentials(OTRS_LOGIN, OTRS_PASSWORD) def test_session_create(self): sessid = self.c.session_create(user_login = OTRS_LOGIN, password = OTRS_PASSWORD) self.assertEqual(len(sessid), 32) def test_ticket_get(self): t = self.c.ticket_get(32) self.assertEqual(t.TicketID, 32) self.assertEqual(t.StateType, 'closed') def test_ticket_get_with_articles(self): t = self.c.ticket_get(32, get_articles=True) self.assertEqual(t.TicketID, 32) self.assertEqual(t.StateType, 'closed') articles = t.articles() self.assertIsInstance(articles, (list, tuple)) self.assertIsInstance(articles[0], Article) self.assertEqual(articles[0].SenderType, 'customer') def test_ticket_search(self): t_list = self.c.ticket_search(CustomerID=9) self.assertIsInstance(t_list, list) self.assertIn(32, t_list) def test_ticket_create(self): t = Ticket(State='new', Priority='3 normal', Queue='Support', Title='Problem test', CustomerUser='******', Type='Divers') a = Article(Subject='UnitTest', Body='bla', Charset='UTF8', MimeType='text/plain') t_id, t_number = self.c.ticket_create(t, a) self.assertIsInstance(t_id, int) self.assertIsInstance(t_number, int) self.assertTrue(len(str(t_number)) >= 12) def test_ticket_update_attrs_by_id(self): t = Ticket(State='new', Priority='3 normal', Queue='Support', Title='Problem test', CustomerUser='******', Type='Divers') a = Article(Subject='UnitTest', Body='bla', Charset='UTF8', MimeType='text/plain') t_id, t_number = self.c.ticket_create(t, a) t = Ticket(Title='Foubar') upd_tid, upd_tnumber = self.c.ticket_update(ticket_id=t_id, ticket=t) self.assertIsInstance(upd_tid, int) self.assertIsInstance(upd_tnumber, int) self.assertTrue(len(str(upd_tnumber)) >= 12) self.assertEqual(upd_tid, t_id) self.assertEqual(upd_tnumber, t_number) upd_t = self.c.ticket_get(t_id) self.assertEqual(upd_t.Title, 'Foubar') self.assertEqual(upd_t.Queue, 'Support') def test_ticket_update_attrs_by_number(self): t = Ticket(State='new', Priority='3 normal', Queue='Support', Title='Problem test', CustomerUser='******', Type='Divers') a = Article(Subject='UnitTest', Body='bla', Charset='UTF8', MimeType='text/plain') t_id, t_number = self.c.ticket_create(t, a) t = Ticket(Title='Foubar') upd_tid, upd_tnumber = self.c.ticket_update(ticket_number=t_number, ticket=t) self.assertIsInstance(upd_tid, int) self.assertIsInstance(upd_tnumber, int) self.assertTrue(len(str(upd_tnumber)) >= 12) self.assertEqual(upd_tid, t_id) self.assertEqual(upd_tnumber, t_number) upd_t = self.c.ticket_get(t_id) self.assertEqual(upd_t.Title, 'Foubar') self.assertEqual(upd_t.Queue, 'Support') def test_ticket_update_new_article(self): t = Ticket(State='new', Priority='3 normal', Queue='Support', Title='Problem test', CustomerUser='******', Type='Divers') a = Article(Subject='UnitTest', Body='bla', Charset='UTF8', MimeType='text/plain') t_id, t_number = self.c.ticket_create(t, a) a2 = Article(Subject='UnitTest2', Body='bla', Charset='UTF8', MimeType='text/plain') a3 = Article(Subject='UnitTest3', Body='bla', Charset='UTF8', MimeType='text/plain') self.c.ticket_update(t_id, article=a2) self.c.ticket_update(t_id, article=a3) t_upd = self.c.ticket_get(t_id, get_articles=True) arts_upd = t_upd.articles() self.assertIsInstance(arts_upd, list) self.assertEqual(len(arts_upd), 4) self.assertEqual(arts_upd[0].Subject, 'UnitTest') # article 1 is an auto response self.assertEqual(arts_upd[2].Subject, 'UnitTest2') self.assertEqual(arts_upd[3].Subject, 'UnitTest3')
def setUp(self): self.c = GenericTicketConnector(OTRS_SERVER, OTRS_WEBSERVICE) self.c.register_credentials(OTRS_LOGIN, OTRS_PASSWORD)
class TestOTRSAPI(TestCase): def setUp(self): self.c = GenericTicketConnector(OTRS_SERVER, OTRS_WEBSERVICE) self.c.register_credentials(OTRS_LOGIN, OTRS_PASSWORD) def test_session_create(self): sessid = self.c.session_create(user_login=OTRS_LOGIN, password=OTRS_PASSWORD) self.assertEqual(len(sessid), 32) def test_ticket_get(self): t = self.c.ticket_get(32) self.assertEqual(t.TicketID, 32) self.assertEqual(t.StateType, 'closed') def test_ticket_get_with_articles(self): t = self.c.ticket_get(32, get_articles=True) self.assertEqual(t.TicketID, 32) self.assertEqual(t.StateType, 'closed') articles = t.articles() self.assertIsInstance(articles, (list, tuple)) self.assertIsInstance(articles[0], Article) self.assertEqual(articles[0].SenderType, 'customer') def test_ticket_search(self): t_list = self.c.ticket_search(CustomerID=9) self.assertIsInstance(t_list, list) self.assertIn(32, t_list) def test_ticket_create(self): t = Ticket(State='new', Priority='3 normal', Queue='Support', Title='Problem test', CustomerUser='******', Type='Divers') a = Article(Subject='UnitTest', Body='bla', Charset='UTF8', MimeType='text/plain') t_id, t_number = self.c.ticket_create(t, a) self.assertIsInstance(t_id, int) self.assertIsInstance(t_number, int) self.assertTrue(len(str(t_number)) >= 12) def test_ticket_update_attrs_by_id(self): t = Ticket(State='new', Priority='3 normal', Queue='Support', Title='Problem test', CustomerUser='******', Type='Divers') a = Article(Subject='UnitTest', Body='bla', Charset='UTF8', MimeType='text/plain') t_id, t_number = self.c.ticket_create(t, a) t = Ticket(Title='Foubar') upd_tid, upd_tnumber = self.c.ticket_update(ticket_id=t_id, ticket=t) self.assertIsInstance(upd_tid, int) self.assertIsInstance(upd_tnumber, int) self.assertTrue(len(str(upd_tnumber)) >= 12) self.assertEqual(upd_tid, t_id) self.assertEqual(upd_tnumber, t_number) upd_t = self.c.ticket_get(t_id) self.assertEqual(upd_t.Title, 'Foubar') self.assertEqual(upd_t.Queue, 'Support') def test_ticket_update_attrs_by_number(self): t = Ticket(State='new', Priority='3 normal', Queue='Support', Title='Problem test', CustomerUser='******', Type='Divers') a = Article(Subject='UnitTest', Body='bla', Charset='UTF8', MimeType='text/plain') t_id, t_number = self.c.ticket_create(t, a) t = Ticket(Title='Foubar') upd_tid, upd_tnumber = self.c.ticket_update(ticket_number=t_number, ticket=t) self.assertIsInstance(upd_tid, int) self.assertIsInstance(upd_tnumber, int) self.assertTrue(len(str(upd_tnumber)) >= 12) self.assertEqual(upd_tid, t_id) self.assertEqual(upd_tnumber, t_number) upd_t = self.c.ticket_get(t_id) self.assertEqual(upd_t.Title, 'Foubar') self.assertEqual(upd_t.Queue, 'Support') def test_ticket_update_new_article(self): t = Ticket(State='new', Priority='3 normal', Queue='Support', Title='Problem test', CustomerUser='******', Type='Divers') a = Article(Subject='UnitTest', Body='bla', Charset='UTF8', MimeType='text/plain') t_id, t_number = self.c.ticket_create(t, a) a2 = Article(Subject='UnitTest2', Body='bla', Charset='UTF8', MimeType='text/plain') a3 = Article(Subject='UnitTest3', Body='bla', Charset='UTF8', MimeType='text/plain') self.c.ticket_update(t_id, article=a2) self.c.ticket_update(t_id, article=a3) t_upd = self.c.ticket_get(t_id, get_articles=True) arts_upd = t_upd.articles() self.assertIsInstance(arts_upd, list) self.assertEqual(len(arts_upd), 4) self.assertEqual(arts_upd[0].Subject, 'UnitTest') # article 1 is an auto response self.assertEqual(arts_upd[2].Subject, 'UnitTest2') self.assertEqual(arts_upd[3].Subject, 'UnitTest3')
parser = argparse.ArgumentParser(description='Close OTRS tickets created by zenotrs-create-ticket.py where the events have closed but the tickets remain open due to malfunction, such as temporary loss of connectivity between Zenoss and OTRS') parser.add_argument('otrsurl', help="URL of OTRS server (ex. http://otrs.mycompany.com)") parser.add_argument('otrsuser', help="Username of OTRS user") parser.add_argument('otrspass', help="Password of OTRS user") parser.add_argument('zenossurl', help="URL of Zenoss server (ex. http://zenoss.mycompany.com:8080)") parser.add_argument('zenossuser', help="Username of Zenoss user") parser.add_argument('zenosspass', help="Password of Zenoss user") parser.add_argument("--queue", help="OTRS Queue for Ticket", required=True) parser.add_argument("--ownerid", help="OTRS Owner ID number for Ticket", required=True) parser.add_argument("--type", help="OTRS Type of Ticket", required=True) parser.add_argument("--eventfield", help="OTRS Dynamic Field for storing Zenoss Event ID", required=True) args = parser.parse_args() server_uri = args.otrsurl webservice_name = 'GenericTicketConnector' client = GenericTicketConnector(server_uri, webservice_name) client.user_session_register(args.otrsuser,args.otrspass) zenoss = Zenoss(args.zenossurl, args.zenossuser, args.zenosspass) t_ids = client.ticket_search(Queues=args.queue, OwnerIDs=args.ownerid, Types=args.type, States='new') for t_id in t_ids: ticket = client.ticket_get(t_id,get_dynamic_fields=True) for dfield in ticket.dynamicfields(): if dfield.Name == args.eventfield: eventState = zenoss.get_event_detail(dfield.Value)['event'][0]['eventState'] print "Open Ticket #" + str(t_id) + ", event " + dfield.Value + ": Current Zenoss event state is " + eventState if (eventState != 'New') and (eventState != 'Acknowledged') and (eventState != 'Suppressed'): a = Article(Subject='Clearing orphaned ticket', Body='Orphaned ticket detected, event closed, ticket should have been auto-closed but was not for some reason. Closing ticket.', Charset='UTF8', MimeType='text/plain', TimeUnit='1')
parser.add_argument("--eventid", help="Zenoss Event ID (GUID)", required=True) parser.add_argument("--device", help='Device event is related to', required=True) parser.add_argument("--component", help='Component the event is related to', required=True) parser.add_argument("--severity", help='Zenoss severity for event', required=True) parser.add_argument("--time", help='Time of event(Zenoss)', required=True) parser.add_argument("--summary", help='Event summary', required=True) parser.add_argument("--message", help='Event message body', required=True) parser.add_argument("--eventurl", help="URL to view event detail in Zenoss", required=True) parser.add_argument("--ackurl", help="URL to acknowledge event in Zenoss", required=True) parser.add_argument("--closeurl", help="URL to clear event in Zenoss", required=True) parser.add_argument("--eventsurl", help="URL to view all events for device in Zenoss", required=True) args = parser.parse_args() server_uri = args.otrsurl webservice_name = 'GenericTicketConnector' client = GenericTicketConnector(server_uri, webservice_name) client.user_session_register(args.otrsuser,args.otrspass) subject = "[zenoss] " + args.device + " " + args.summary body = "Summary: " + args.summary + "\n" \ + "Device: " + args.device + "\n" \ + "Component: " + args.component + "\n" \ + "Severity: " + args.severity + "\n" \ + "Time: " + args.time + "\n\n" \ + "Message: \n\n" \ + args.message + "\n\n\n" \ + "Event Detail: " + args.eventurl + "\n" \ + "Acknowledge: " + args.ackurl + "\n" \ + "Close: " + args.closeurl + "\n" \ + "Device Events: " + args.eventsurl
# -*- coding: utf-8 -*- # @author: Janssen Lima - [email protected] # ATEN??O: C?digo n?o est? funcional. Em desenvolvimento from otrs.client import GenericTicketConnector from otrs.objects import Ticket, Article, DynamicField server_uri = 'http://localhost/' webservice_name = 'IntegraZabbix' client = GenericTicketConnector(server_uri, webservice_name) user_login = '******' password = '******' client.user_session_register(user_login, password) pega_ticket = client.ticket_search(State=1) print len(pega_ticket) pega_ticket = client.ticket_search(Body='<inserir_texto_procura>') for tickets in pega_ticket: print "Ticket: ",tickets pega_fechados = client.ticket_search(State='new') df_searchId = DynamicField(Name='ZabbixIdTrigger', Value="13563", Operator='Like') df_searchState = DynamicField(Name='ZabbixStateTrigger', Value="PROBLEM", Operator='Like') busca_df=client.ticket_search(Queues='Zabbix', dynamic_fields=[df_searchId, df_searchState])
#!/usr/bin/env python from otrs.client import GenericTicketConnector from otrs.objects import Ticket, Article, DynamicField, Attachment import yaml config = yaml.safe_load(open("config.yml")) server_uri = config['server'] webservice_name = 'GenericTicketConnector' client = GenericTicketConnector(server_uri, webservice_name) # user session client.user_session_register(config['username'], config['password']) # returns all tickets in queue Support tickets = client.ticket_search( Queues = 'Support Queue', From = '{{term}}', To = '{{term}}', Cc = '{{term}}', Subject = '{{term}}', Body = '{{term}}', ContentSearch = 'OR', FullTextIndex = 1 ) print tickets
parser.add_argument("--eventfield", help="OTRS Dynamic Field for storing Zenoss Event ID", required=True) parser.add_argument("--eventid", help="Zenoss Event ID (GUID)", required=True) parser.add_argument("--device", help='Device event is related to', required=True) parser.add_argument("--component", help='Component the event is related to', required=True) parser.add_argument("--severity", help='Zenoss severity for event', required=True) parser.add_argument("--clearid", help='Zenoss explanation for why event was cleared (ex. aging)', required=True) parser.add_argument("--statechange", help='Time event cleared(Zenoss)', required=True) parser.add_argument("--clearsummary", help='Summary for clear event', required=True) parser.add_argument("--summary", help='Summary for original event', required=True) parser.add_argument("--message", help='Event message body', required=True) parser.add_argument("--reopenurl", help="URL to reopen event in Zenoss", required=True) args = parser.parse_args() server_uri = args.otrsurl webservice_name = 'GenericTicketConnector' client = GenericTicketConnector(server_uri, webservice_name) client.user_session_register(args.otrsuser,args.otrspass) # clearsummary may have extra quotation marks around it when called by zenoss clearsummary = args.clearsummary if clearsummary.startswith('"') and clearsummary.endswith('"'): clearsummary = clearsummary[1:-1] subject = "[zenoss] CLEAR: " + args.device + " " + clearsummary body = "Event: " + args.summary + "\n" \ + "Cleared by: " + args.clearid + "\n" \ + "Clear Summary: " + clearsummary + "\n" \ + "At: " + args.statechange + "\n" \ + "Device: " + args.device + "\n" \