REPORTS/Controller/zammad.py

83 lines
3.3 KiB
Python

import psycopg2
from datetime import datetime, timedelta
from Controller import mysql_connect
import socket
def tickets(ip,name):
# Verbindungsinformationen zur PostgreSQL-Datenbank
db_host = "172.17.1.5"
db_name = "zammad_production"
db_user = "zammad"
db_password = "zammad"
table_name = "Tickets"
# Verbindung zur Datenbank herstellen
connection = psycopg2.connect(
host=db_host,
database=db_name,
user=db_user,
password=db_password
)
## Abfrage der Daten mit SL / ZL
cursor = connection.cursor()
query = "SELECT tickets.*, tag_items.name AS SLA FROM tickets LEFT JOIN tags ON tickets.id = tags.o_id LEFT JOIN tag_items ON tags.tag_item_id = tag_items.id;"
cursor.execute(query)
## Header auslesen
headers = [desc[0] for desc in cursor.description]
## Orga Auslesen
group = f"SELECT id FROM groups WHERE name = '{name.replace('ae','ä').replace('ue','ü').replace('oe','ö').replace('-',' ')}'"
cursor.execute(group)
query = f"SELECT tickets.*, tag_items.name AS SLA FROM tickets LEFT JOIN tags ON tickets.id = tags.o_id LEFT JOIN tag_items ON tags.tag_item_id = tag_items.id WHERE group_id = {cursor.fetchone()[0]}"
cursor.execute(query)
results = cursor.fetchall()
column_type = f"SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'tickets' order by column_name ASC;"
cursor.execute(column_type)
column_type = cursor.fetchall()
columns = ""
## Cretae Tabelle with column_type
create_table_query = f"CREATE TABLE IF NOT EXISTS `{table_name}` (importdate BIGINT(11), "
for i in column_type:
columns += f"{i[0]},"
if i[1] == "timestamp without time zone":
create_table_query += f"`{i[0]}` DATETIME, "
elif i[1] == "character varying":
create_table_query += f"`{i[0]}` TEXT, "
else:
create_table_query += f"`{i[0]}` {i[1]}, "
create_table_query = create_table_query.rstrip(",") + "sla TEXT)"
mysql_connect.create_database(create_table_query, name)
for row in results:
unix_time = int(datetime.now().timestamp())
id = mysql_connect.get_user(f"SELECT id FROM `{table_name}` where id = '%s'", name,(row[0],))
given_date = datetime.strptime(str(row[36]), "%Y-%m-%d %H:%M:%S.%f")
yesterday = datetime.now() - timedelta(days=1)
if id is None:
insert_query = f"INSERT INTO `{table_name}` (importdate, `{'`, `'.join(headers)}`) VALUES (%s, {', '.join(['%s'] * len(headers))})"
mysql_connect.add_user(insert_query, name, (unix_time,) + row)
else:
if given_date > yesterday:
update_query = f"UPDATE `{table_name}` SET "
for field in headers:
update_query += f" `{field}` = %s, "
update_query = update_query.rstrip(", ")
update_query += f" WHERE id = {row[0]}"
mysql_connect.add_user(update_query,name, row)
def get_local_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
local_ip = s.getsockname()[0]
s.close()
return local_ip
except Exception as e:
print(f"Fehler beim Abrufen der lokalen IP-Adresse: {e}")
return None
tickets(get_local_ip(),"Jaehler-GmbH")