[fs2zammad] add processed folder, sort input tickets, sleep on failure
This commit is contained in:
parent
a44c5361f4
commit
e3eb49427b
1 changed files with 20 additions and 7 deletions
27
fs2zammad
27
fs2zammad
|
@ -7,6 +7,7 @@ import pickle
|
||||||
import sys
|
import sys
|
||||||
import html2text
|
import html2text
|
||||||
import traceback
|
import traceback
|
||||||
|
import time
|
||||||
|
|
||||||
from zammad_py import ZammadAPI
|
from zammad_py import ZammadAPI
|
||||||
from zammad_py.api import Resource, TagList, TicketArticle
|
from zammad_py.api import Resource, TagList, TicketArticle
|
||||||
|
@ -24,7 +25,7 @@ TEMPLATE = """{
|
||||||
"""
|
"""
|
||||||
|
|
||||||
COMMENT_TEMPLATE = """
|
COMMENT_TEMPLATE = """
|
||||||
Ticket imported from Request Tracker
|
Ticket imported from Request Tracker (RT-#{numerical_id})
|
||||||
|
|
||||||
URL: https://support.ungleich.ch/Ticket/Display.html?id={numerical_id}
|
URL: https://support.ungleich.ch/Ticket/Display.html?id={numerical_id}
|
||||||
Created: {Created}
|
Created: {Created}
|
||||||
|
@ -143,7 +144,7 @@ def create_zammad_ticket(id, zammad, h2t, retries=3):
|
||||||
creator = zammad_creator
|
creator = zammad_creator
|
||||||
|
|
||||||
zammad_ticket_template = {
|
zammad_ticket_template = {
|
||||||
"title": rt_ticket["ticket"]["Subject"] or 'RT: Empty Subject',
|
"title": "[RT-{}] {}".format(id, rt_ticket["ticket"]["Subject"]),
|
||||||
"group": "Users",
|
"group": "Users",
|
||||||
"customer": creator,
|
"customer": creator,
|
||||||
"note": "RT-import:{}".format(rt_ticket["ticket"]["original_id"]),
|
"note": "RT-import:{}".format(rt_ticket["ticket"]["original_id"]),
|
||||||
|
@ -177,7 +178,7 @@ def create_zammad_ticket(id, zammad, h2t, retries=3):
|
||||||
|
|
||||||
# Ignore comments for merged tickets.
|
# Ignore comments for merged tickets.
|
||||||
if merged:
|
if merged:
|
||||||
return
|
return zammad_ticket["id"]
|
||||||
|
|
||||||
# Internal note regarding the RT-Zammad import.
|
# Internal note regarding the RT-Zammad import.
|
||||||
TicketArticle(zammad).create(
|
TicketArticle(zammad).create(
|
||||||
|
@ -251,11 +252,18 @@ def create_zammad_ticket(id, zammad, h2t, retries=3):
|
||||||
|
|
||||||
if restore_creator_to != None:
|
if restore_creator_to != None:
|
||||||
zammad.ticket.update(zammad_ticket["id"], {"customer_id": restore_creator_to})
|
zammad.ticket.update(zammad_ticket["id"], {"customer_id": restore_creator_to})
|
||||||
|
|
||||||
|
# Returns the new Zammad ticket ID.
|
||||||
|
return zammad_ticket["id"]
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
print("Received keyboard interrupt. Exiting.")
|
print("Received keyboard interrupt. Exiting.")
|
||||||
sys.exit()
|
sys.exit()
|
||||||
except:
|
except:
|
||||||
print(f"Failed to import RT-#{id} .. ({retries} retries left)")
|
print(f"Failed to import RT-{id} .. ({retries} retries left)")
|
||||||
|
print("Sleeping 5 seconds to give Zammad some air...")
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
if retries > 0:
|
if retries > 0:
|
||||||
create_zammad_ticket(id, zammad, h2t, retries - 1)
|
create_zammad_ticket(id, zammad, h2t, retries - 1)
|
||||||
else:
|
else:
|
||||||
|
@ -280,18 +288,23 @@ os.makedirs("users", exist_ok=True)
|
||||||
os.makedirs("tickets", exist_ok=True)
|
os.makedirs("tickets", exist_ok=True)
|
||||||
os.makedirs("attachments", exist_ok=True)
|
os.makedirs("attachments", exist_ok=True)
|
||||||
os.makedirs("failed", exist_ok=True)
|
os.makedirs("failed", exist_ok=True)
|
||||||
|
os.makedirs("processed", exist_ok=True)
|
||||||
|
|
||||||
ticket_ids = os.listdir("tickets/")
|
ticket_ids = os.listdir("tickets/")
|
||||||
print(f"Found {len(ticket_ids)} tickets on filesystem.")
|
print(f"Found {len(ticket_ids)} tickets on filesystem.")
|
||||||
|
ticket_ids = list(map(int, ticket_ids))
|
||||||
ticket_ids.sort()
|
ticket_ids.sort()
|
||||||
|
|
||||||
for id in ticket_ids:
|
for id in ticket_ids:
|
||||||
try:
|
try:
|
||||||
create_zammad_ticket(id, zammad, h2t, 3)
|
zammad_ticket_id = create_zammad_ticket(id, zammad, h2t, 5)
|
||||||
|
dumpfile = f"processed/{id}"
|
||||||
|
with open(dumpfile, "w") as handle:
|
||||||
|
handle.write(f"{zammad_ticket_id}")
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
sys.exit()
|
sys.exit()
|
||||||
except:
|
except:
|
||||||
print(f"Failed to import RT#{id}")
|
print(f"Failed to import RT#{id}")
|
||||||
dumpfile = f"failed/{id}"
|
dumpfile = f"failed/{id}"
|
||||||
with open(dumpfile, "wb") as handle:
|
with open(dumpfile, "wb") as handle:
|
||||||
pickle.dump(id, handle)
|
traceback.print_exc(file=handle)
|
||||||
|
|
Loading…
Reference in a new issue