Compare commits
9 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
2e44a7eee5 | |
|
|
94292ab0f7 | |
|
|
1ad2fc8c9a | |
|
|
293267e70c | |
|
|
ba564899b9 | |
|
|
601f86e2e7 | |
|
|
172fe23f65 | |
|
|
147c156dda | |
|
|
2500cf9999 |
|
|
@ -0,0 +1,7 @@
|
||||||
|
## Ticketsystem
|
||||||
|
ZAMMAD_URL = "https://ticket.stines.de/api/v1"
|
||||||
|
ZAMMAD_API_TOKEN ="1v4XGY7cZpBXSfb4s_tIBbywQjcaDV6q65IXQyVXrrBDqVtmAtLxM5tOqIAp0VXZ"
|
||||||
|
|
||||||
|
## API-Server
|
||||||
|
API_SERVER = "http://api.stines.de:8001"
|
||||||
|
API_TOKEN = "^YWUbG7yX*V!tV^KBSd*2c&vdN3wV9a2i7f3hfGFMBYFxi6#mMiJGiaA5KEHE%B*miK%qb7rQ67gmcYP@gqmux8"
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.11" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/Agents.iml" filepath="$PROJECT_DIR$/.idea/Agents.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
# Funktion zum Konvertieren des LastLogonTimestamp in Datum
|
||||||
|
function Convert-LastLogonTimestamp {
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[long]$Timestamp
|
||||||
|
)
|
||||||
|
|
||||||
|
$DateTime = [DateTime]::FromFileTime($Timestamp)
|
||||||
|
return $DateTime
|
||||||
|
}
|
||||||
|
|
||||||
|
# Funktion zum Abrufen der lokalen IP-Adresse
|
||||||
|
function Get-LocalIPAddress {
|
||||||
|
$ipAddress = [System.Net.Dns]::GetHostAddresses([System.Net.Dns]::GetHostName()) |
|
||||||
|
Where-Object { $_.AddressFamily -eq 'InterNetwork' } |
|
||||||
|
Select-Object -First 1
|
||||||
|
return $ipAddress.IPAddressToString
|
||||||
|
}
|
||||||
|
|
||||||
|
# Gruppe "Users" abrufen
|
||||||
|
$groupName = "Reporting"
|
||||||
|
$group = Get-ADGroup -Filter { Name -eq $groupName }
|
||||||
|
|
||||||
|
if ($group -eq $null) {
|
||||||
|
Write-Error "Gruppe '$groupName' wurde nicht gefunden."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
# Mitglieder der Gruppe abrufen
|
||||||
|
$groupMembers = Get-ADGroupMember -Identity $group -Recursive | Where-Object { $_.objectClass -eq 'user' }
|
||||||
|
|
||||||
|
# Abrufen der lokalen IP-Adresse
|
||||||
|
$localIPAddress = Get-LocalIPAddress
|
||||||
|
|
||||||
|
# Erstellen einer Hash-Tabelle zum Speichern der letzten Anmeldeinformationen für jeden Benutzer
|
||||||
|
$userLogins = @{}
|
||||||
|
|
||||||
|
# Umwandeln der Benutzerinformationen und Ausgabe zur Konsole
|
||||||
|
foreach ($member in $groupMembers) {
|
||||||
|
$user = Get-ADUser -Identity $member.SamAccountName -Properties LastLogonTimestamp,createTimeStamp
|
||||||
|
$lastLogonDateTime = if ($user.LastLogonTimestamp) { (Convert-LastLogonTimestamp -Timestamp $user.LastLogonTimestamp).ToString("yyyy-MM-dd HH:mm:ss") } else { ($user.createTimeStamp).ToString("yyyy-MM-dd HH:mm:ss") }
|
||||||
|
|
||||||
|
$convertedUser = [PSCustomObject]@{
|
||||||
|
username = $user.SamAccountName
|
||||||
|
lastaccess = $lastLogonDateTime
|
||||||
|
ipaddress = $localIPAddress
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ausgabe des konvertierten Benutzers zur Konsole
|
||||||
|
Write-Output $convertedUser
|
||||||
|
|
||||||
|
# Rückgabe des konvertierten Benutzers für JSON-Umwandlung
|
||||||
|
$userLogins[$user.SamAccountName] = $convertedUser
|
||||||
|
}
|
||||||
|
|
||||||
|
# Define the JSON file path with current date and hour
|
||||||
|
$dateString = (Get-Date).ToString("yyyyMMdd_HH-mm")
|
||||||
|
$jsonPath = "C:\Scripte\LastLogins_$dateString.json"
|
||||||
|
|
||||||
|
# Output the last login event for each user to the JSON file
|
||||||
|
$userLoginsArray = $userLogins.GetEnumerator() | ForEach-Object {
|
||||||
|
$_.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
$userLoginsArray | ConvertTo-Json | Set-Content -Path $jsonPath -Encoding UTF8
|
||||||
|
|
||||||
|
Write-Output "JSON file created at $jsonPath"
|
||||||
|
|
||||||
|
# API endpoint URL
|
||||||
|
$apiUrl = "http://api.stines.de:8001/report"
|
||||||
|
|
||||||
|
# Your API key
|
||||||
|
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
|
||||||
|
$headers.Add("Content-Type", "application/json")
|
||||||
|
$headers.Add("access_token", "^YWUbG7yX*V!tV^KBSd*2c&vdN3wV9a2i7f3hfGFMBYFxi6#mMiJGiaA5KEHE%B*miK%qb7rQ67gmcYP@gqmux8")
|
||||||
|
|
||||||
|
# Loop through the collected user logins and send each as a JSON payload to the API
|
||||||
|
foreach ($userLogin in $userLoginsArray) {
|
||||||
|
$userLoginObject = $userLogin | Select-Object username, lastaccess, ipaddress
|
||||||
|
|
||||||
|
# Convert the user login object to JSON
|
||||||
|
$jsonPayload = $userLoginObject | ConvertTo-Json -Depth 3
|
||||||
|
|
||||||
|
# Encode JSON payload in UTF-8
|
||||||
|
$utf8JsonPayload = [System.Text.Encoding]::UTF8.GetBytes($jsonPayload)
|
||||||
|
|
||||||
|
# Send the JSON payload to the API
|
||||||
|
try {
|
||||||
|
$response = Invoke-RestMethod -Uri $apiUrl -Method Post -Body $utf8JsonPayload -ContentType 'application/json' -Headers $headers
|
||||||
|
Write-Output "Sent login data for user $($userLoginObject.username) to the API. Response: $response"
|
||||||
|
} catch {
|
||||||
|
Write-Error "Failed to send login data for user $($userLoginObject.username). Error: $_"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Output "Finished sending login data to the API"
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
## Abfrage des Eregniss für Userlogin (lastacces)
|
|
||||||
|
|
||||||
## Abfrage Gruppen (groups)
|
|
||||||
|
|
||||||
## Abfrage Festplatten Belegung (space_used)
|
|
||||||
|
|
||||||
## Abfrage Profile Ordner Belegung (services_space_used) -> übergabe item & spaceused
|
|
||||||
|
|
||||||
## Abfrage Updates (updates = yes/no)
|
|
||||||
|
|
@ -1,117 +0,0 @@
|
||||||
import msal
|
|
||||||
import requests
|
|
||||||
import pandas as pd
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
# Konfigurationsvariablen
|
|
||||||
client_id = '90571c9b-d407-4d2a-aadd-4a523ff85296'
|
|
||||||
client_secret = 'ryp8Q~qr6LBOUL2G333a.mf-vg5V..ONl7qJTdza'
|
|
||||||
tenant_id = '9e449aaa-285c-4572-a132-58db027026d0'
|
|
||||||
api_server_endpoint = "http://api.stines.de:8001/office/post"
|
|
||||||
# headers = 'access_token':'^YWUbG7yX*V!tV^KBSd*2c&vdN3wV9a2i7f3hfGFMBYFxi6#mMiJGiaA5KEHE%B*miK%qb7rQ67gmcYP@gqmux8'
|
|
||||||
|
|
||||||
# Die URL für das Token
|
|
||||||
authority = f'https://login.microsoftonline.com/{tenant_id}'
|
|
||||||
|
|
||||||
# Der Scope für die Microsoft Graph API
|
|
||||||
scope = ['https://graph.microsoft.com/.default']
|
|
||||||
|
|
||||||
# MSAL-Instanz erstellen
|
|
||||||
app = msal.ConfidentialClientApplication(
|
|
||||||
client_id,
|
|
||||||
authority=authority,
|
|
||||||
client_credential=client_secret,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Token erhalten
|
|
||||||
result = None
|
|
||||||
result = app.acquire_token_silent(scope, account=None)
|
|
||||||
|
|
||||||
if not result:
|
|
||||||
print("Kein Caching vorhanden, holen Sie ein neues Token.")
|
|
||||||
result = app.acquire_token_for_client(scopes=scope)
|
|
||||||
print(result)
|
|
||||||
|
|
||||||
if "access_token" in result:
|
|
||||||
# Token erfolgreich erhalten
|
|
||||||
access_token = result['access_token']
|
|
||||||
|
|
||||||
print(access_token)
|
|
||||||
|
|
||||||
# API-Endpunkt für aktive Office-Pakete
|
|
||||||
endpoint = "https://graph.microsoft.com/v1.0/users?$select=userPrincipalName,assignedLicenses,signInActivity"
|
|
||||||
|
|
||||||
|
|
||||||
headers = {
|
|
||||||
'Authorization': f'Bearer {access_token}',
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
}
|
|
||||||
|
|
||||||
response = requests.get(endpoint, headers=headers)
|
|
||||||
|
|
||||||
if response.status_code == 200:
|
|
||||||
# Die Antwort als JSON behandeln
|
|
||||||
data = response.json()
|
|
||||||
|
|
||||||
# Extrahieren der Benutzerdaten aus dem JSON
|
|
||||||
users = data.get('value', [])
|
|
||||||
|
|
||||||
# Die `skuId` und `lastNonInteractiveSignInDateTime` extrahieren und hinzufügen
|
|
||||||
user_list = []
|
|
||||||
for user in users:
|
|
||||||
if 'assignedLicenses' in user:
|
|
||||||
for license in user['assignedLicenses']:
|
|
||||||
if 'skuId' in license:
|
|
||||||
user_copy = user.copy()
|
|
||||||
user_copy['skuId'] = license['skuId']
|
|
||||||
if user_copy.get('signInActivity'):
|
|
||||||
sign_in_time = user_copy['signInActivity'].get('lastNonInteractiveSignInDateTime')
|
|
||||||
if sign_in_time:
|
|
||||||
user_copy['lastNonInteractiveSignInDateTime'] = datetime.strptime(sign_in_time,'%Y-%m-%dT%H:%M:%SZ').strftime('%Y-%m-%d %H:%M:%S')
|
|
||||||
else:
|
|
||||||
user_copy['lastNonInteractiveSignInDateTime'] = None
|
|
||||||
else:
|
|
||||||
user_copy['lastNonInteractiveSignInDateTime'] = None
|
|
||||||
user_list.append(user_copy)
|
|
||||||
|
|
||||||
# Filtern der Benutzer, die eine `skuId` haben
|
|
||||||
users_with_skuId = [user for user in user_list if user['skuId']]
|
|
||||||
|
|
||||||
# Konvertieren der Benutzerdaten in ein DataFrame
|
|
||||||
df = pd.DataFrame(users_with_skuId)
|
|
||||||
|
|
||||||
# Pandas Anzeigeoptionen anpassen
|
|
||||||
pd.set_option('display.max_columns', None)
|
|
||||||
pd.set_option('display.max_rows', None)
|
|
||||||
pd.set_option('display.max_colwidth', None)
|
|
||||||
pd.set_option('display.width', 1000)
|
|
||||||
|
|
||||||
# Alles nach dem @ im "User Principal Name" entfernen
|
|
||||||
if 'userPrincipalName' in df.columns:
|
|
||||||
df['userPrincipalName'] = df['userPrincipalName'].str.split('@').str[0]
|
|
||||||
|
|
||||||
# Nur die gewünschten Spalten auswählen und an die API-Server übergeben
|
|
||||||
selected_columns = df[["userPrincipalName", "skuId", "lastNonInteractiveSignInDateTime"]]
|
|
||||||
reporting_date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
|
||||||
|
|
||||||
for index, row in selected_columns.iterrows():
|
|
||||||
payload = {
|
|
||||||
"itemkey": row["skuId"],
|
|
||||||
"username": row["userPrincipalName"],
|
|
||||||
"reportingdate": reporting_date,
|
|
||||||
"lastaccess": row["lastNonInteractiveSignInDateTime"]
|
|
||||||
}
|
|
||||||
api_response = requests.post(api_server_endpoint, json=payload, headers= {'access_token':'^YWUbG7yX*V!tV^KBSd*2c&vdN3wV9a2i7f3hfGFMBYFxi6#mMiJGiaA5KEHE%B*miK%qb7rQ67gmcYP@gqmux8'})
|
|
||||||
if api_response.status_code == 200:
|
|
||||||
print(f"Erfolgreich gesendet: {payload}")
|
|
||||||
else:
|
|
||||||
print(f"Fehler beim Senden von {payload}: {api_response.status_code} - {api_response.text}")
|
|
||||||
|
|
||||||
else:
|
|
||||||
print(f"Fehler beim Abrufen der Daten: {response.status_code}")
|
|
||||||
print(f"Antwort: {response.text}")
|
|
||||||
else:
|
|
||||||
print("Fehler beim Abrufen des Tokens")
|
|
||||||
print(result.get("error"))
|
|
||||||
print(result.get("error_description"))
|
|
||||||
print(result.get("correlation_id"))
|
|
||||||
|
|
@ -0,0 +1,98 @@
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Lade die Umgebungsvariablen aus der .env Datei
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
# Hole die Werte aus der .env Datei
|
||||||
|
zammad_url = os.getenv('ZAMMAD_URL')
|
||||||
|
zammad_api_token = os.getenv('ZAMMAD_API_TOKEN')
|
||||||
|
|
||||||
|
api_url = os.getenv('API_SERVER')
|
||||||
|
api_token = os.getenv('API_TOKEN')
|
||||||
|
|
||||||
|
headers_zammad = {"Authorization": f"Token token={zammad_api_token}"}
|
||||||
|
headers_api = {"access_token": f"{api_token}", "Content-Type": "application/json"}
|
||||||
|
|
||||||
|
# API Anfrage an Zammad für Organisationen
|
||||||
|
response_org = requests.get(f"{zammad_url}/organizations", headers=headers_zammad)
|
||||||
|
# API Anfrage an Zammad für Benutzer
|
||||||
|
response_user = requests.get(f"{zammad_url}/users", headers=headers_zammad)
|
||||||
|
|
||||||
|
if response_org.status_code == 200 and response_user.status_code == 200:
|
||||||
|
organizations = response_org.json()
|
||||||
|
users = response_user.json()
|
||||||
|
|
||||||
|
# Erstelle ein Dictionary, das die Organisationen nach ID speichert
|
||||||
|
org_dict = {org['id']: org['domain'] for org in organizations}
|
||||||
|
# Erstelle ein Dictionary, das die Benutzer nach ID speichert
|
||||||
|
user_dict = {user['id']: user for user in users}
|
||||||
|
|
||||||
|
# Berechne den ersten und letzten Tag des letzten Monats
|
||||||
|
today = datetime.now()
|
||||||
|
first_day_last_month = today.replace(day=1) - timedelta(days=1)
|
||||||
|
first_day_last_month = first_day_last_month.replace(day=1)
|
||||||
|
last_day_last_month = today.replace(day=1) - timedelta(days=1)
|
||||||
|
|
||||||
|
# Formatierung der Daten für den Vergleich
|
||||||
|
start_date_str = first_day_last_month.strftime('%Y-%m-%dT%H:%M:%SZ')
|
||||||
|
end_date_str = last_day_last_month.strftime('%Y-%m-%dT%H:%M:%SZ')
|
||||||
|
|
||||||
|
# API Anfrage an Zammad für Tickets mit Pagination und Sortierung
|
||||||
|
params = {
|
||||||
|
'query': f"last_close_at:[{start_date_str} TO {end_date_str}]",
|
||||||
|
'sort_by': 'last_close_at',
|
||||||
|
'order': 'desc',
|
||||||
|
'per_page': 100,
|
||||||
|
'page': 1
|
||||||
|
}
|
||||||
|
response_tickets = requests.get(f"{zammad_url}/tickets/search", headers=headers_zammad, params=params)
|
||||||
|
|
||||||
|
if response_tickets.status_code == 200:
|
||||||
|
response_data = response_tickets.json()
|
||||||
|
|
||||||
|
# Extrahiere die Ticket-IDs und die zugehörigen Ticket-Daten aus assets
|
||||||
|
ticket_ids = response_data.get('tickets', [])
|
||||||
|
ticket_assets = response_data.get('assets', {}).get('Ticket', {})
|
||||||
|
|
||||||
|
# Filtere die Tickets, extrahiere die benötigten Felder und verknüpfe mit Organisationen und Benutzern
|
||||||
|
filtered_tickets = [
|
||||||
|
{
|
||||||
|
'number': ticket_data.get('number'),
|
||||||
|
'title': ticket_data.get('title'),
|
||||||
|
'create_date': datetime.strptime(ticket_data.get('created_at'), '%Y-%m-%dT%H:%M:%S.%fZ').strftime('%Y-%m-%d %H:%M:%S') if ticket_data.get('created_at') else None,
|
||||||
|
'closed_date': datetime.strptime(ticket_data.get('last_close_at'), '%Y-%m-%dT%H:%M:%S.%fZ').strftime('%Y-%m-%d %H:%M:%S') if ticket_data.get('last_close_at') else None,
|
||||||
|
'organization_domain': org_dict.get(ticket_data.get('organization_id')),
|
||||||
|
'time_unit': ticket_data.get('time_unit') if ticket_data.get('time_unit') is not None else "0",
|
||||||
|
'created_by': user_dict.get(ticket_data.get('created_by_id'), {}).get('login')
|
||||||
|
}
|
||||||
|
for ticket_id in ticket_ids
|
||||||
|
if (ticket_data := ticket_assets.get(str(ticket_id)))
|
||||||
|
]
|
||||||
|
|
||||||
|
# Ausgabe der gefilterten Tickets als JSON-String
|
||||||
|
json_output = json.dumps(filtered_tickets, indent=4, ensure_ascii=False)
|
||||||
|
|
||||||
|
|
||||||
|
for tickets in filtered_tickets:
|
||||||
|
# POST-Anfrage an den anderen API-Server
|
||||||
|
print(tickets)
|
||||||
|
response_post = requests.post(f"{api_url}/post/tickets", headers=headers_api, json=tickets)
|
||||||
|
|
||||||
|
# Überprüfen der Antwort des API-Servers
|
||||||
|
if response_post.status_code == 200 or response_post.status_code == 201:
|
||||||
|
print("Data successfully posted.")
|
||||||
|
else:
|
||||||
|
print(f"Failed to post data. Status code: {response_post.status_code}")
|
||||||
|
print(f"Response content: {response_post.content.decode('utf-8')}")
|
||||||
|
|
||||||
|
else:
|
||||||
|
print(f"Failed to retrieve tickets. Status code: {response_tickets.status_code}")
|
||||||
|
else:
|
||||||
|
if response_org.status_code != 200:
|
||||||
|
print(f"Failed to retrieve organizations. Status code: {response_org.status_code}")
|
||||||
|
if response_user.status_code != 200:
|
||||||
|
print(f"Failed to retrieve users. Status code: {response_user.status_code}")
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import socket
|
||||||
|
|
||||||
|
def get_local_ip():
|
||||||
|
try:
|
||||||
|
# Ein temporärer Socket erstellen, um die lokale IP-Adresse zu ermitteln
|
||||||
|
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
# Verbindung zu einem öffentlichen DNS-Server herstellen
|
||||||
|
s.connect(("8.8.8.8", 80))
|
||||||
|
# Die lokale IP-Adresse aus dem Socket abrufen
|
||||||
|
local_ip = s.getsockname()[0]
|
||||||
|
s.close()
|
||||||
|
return local_ip
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Fehler beim Ermitteln der lokalen IP-Adresse: {e}")
|
||||||
|
return None
|
||||||
78
main.py
78
main.py
|
|
@ -1,6 +1,74 @@
|
||||||
## Services Abfrage am API Server mit IP-Adresse
|
import time
|
||||||
|
import update_check
|
||||||
|
import os
|
||||||
|
import platform
|
||||||
|
import subprocess
|
||||||
|
import requests
|
||||||
|
import functions.ipaddress
|
||||||
|
|
||||||
## Ping 10sec
|
api_server = "http://api.stines.de:8001/"
|
||||||
## Service Abfrage aller 60sec
|
api_key = "^YWUbG7yX*V!tV^KBSd*2c&vdN3wV9a2i7f3hfGFMBYFxi6#mMiJGiaA5KEHE%B*miK%qb7rQ67gmcYP@gqmux8"
|
||||||
## time = 10
|
headers = {"Content-Type":"application/json",
|
||||||
## for i in time
|
"access_token":f"{api_key}"}
|
||||||
|
|
||||||
|
service_ID = []
|
||||||
|
|
||||||
|
def restart_service():
|
||||||
|
check_os = platform.system()
|
||||||
|
if check_os == ("Linux"):
|
||||||
|
os.popen("systemctl restart agents.services")
|
||||||
|
print("Yes Man!")
|
||||||
|
else:
|
||||||
|
subprocess.run('sc', 'start', 'Agents')
|
||||||
|
|
||||||
|
def get_response(endpoint,data):
|
||||||
|
response = requests.get(f"{api_server}{endpoint}",headers=headers, json=data)
|
||||||
|
print(response.text)
|
||||||
|
return response.text
|
||||||
|
|
||||||
|
def post_response(endpoint, data):
|
||||||
|
response = requests.post(f"{api_server}{endpoint}",headers=headers, json=data)
|
||||||
|
print(response.text)
|
||||||
|
return response.text
|
||||||
|
|
||||||
|
def check_update():
|
||||||
|
if update_check.check_version() == True:
|
||||||
|
restart_service()
|
||||||
|
post_response("update_checked",{"ipaddress":f'{functions.ipaddress.get_local_ip()}',"version": update_check.current_version})
|
||||||
|
|
||||||
|
def ping():
|
||||||
|
post_response("ping",{"ipaddress":f'{functions.ipaddress.get_local_ip()}'})
|
||||||
|
|
||||||
|
def controller_systeminfo():
|
||||||
|
## Check RAM
|
||||||
|
## Check CPU
|
||||||
|
## Check HDD
|
||||||
|
print("controller.systeminfo()")
|
||||||
|
|
||||||
|
def services_run():
|
||||||
|
service_ID = get_response("get/service",{"ipaddress":f'{functions.ipaddress.get_local_ip()}'})
|
||||||
|
print(service_ID)
|
||||||
|
|
||||||
|
|
||||||
|
def main_loop():
|
||||||
|
tasks = [
|
||||||
|
{"interval": 30, "last_run": time.time(), "functions": [ping,services_run]},
|
||||||
|
{"interval": 60, "last_run": time.time(), "functions": [controller_systeminfo]},
|
||||||
|
{"interval": 3600, "last_run": time.time(), "functions": [services_run]}
|
||||||
|
]
|
||||||
|
|
||||||
|
while True:
|
||||||
|
current_time = time.time()
|
||||||
|
|
||||||
|
for task in tasks:
|
||||||
|
if current_time - task["last_run"] >= task["interval"]:
|
||||||
|
for function in task["functions"]:
|
||||||
|
function()
|
||||||
|
task["last_run"] = current_time
|
||||||
|
|
||||||
|
# Eine kurze Pause, um die CPU nicht zu überlasten
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main_loop()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import requests
|
||||||
|
|
||||||
|
current_version = []
|
||||||
|
new_version = []
|
||||||
|
|
||||||
|
# Get Current Version of Files -> Verionfile txt on /opt/agents/version.txt
|
||||||
|
|
||||||
|
# Check Verison on Github by Curl http://172.17.1.251/sebastian.serfling/Agents/src/branch/main/version
|
||||||
|
|
||||||
|
# IF Version same ->
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
def ping():
|
||||||
|
print("Ping alle 30 Sekunden")
|
||||||
|
|
||||||
|
|
||||||
|
def ping1():
|
||||||
|
print("Ping1 alle 30 Sekunden")
|
||||||
|
|
||||||
|
|
||||||
|
def ping2():
|
||||||
|
print("Ping2 alle 60 Sekunden")
|
||||||
|
|
||||||
|
|
||||||
|
def ping3():
|
||||||
|
print("Ping3 alle 3600 Sekunden")
|
||||||
|
|
||||||
|
|
||||||
|
def main_loop():
|
||||||
|
tasks = [
|
||||||
|
{"interval": 3, "last_run": time.time(), "functions": [ping, ping1]},
|
||||||
|
{"interval": 6, "last_run": time.time(), "functions": [ping2]},
|
||||||
|
{"interval": 36, "last_run": time.time(), "functions": [ping3]}
|
||||||
|
]
|
||||||
|
|
||||||
|
while True:
|
||||||
|
current_time = time.time()
|
||||||
|
|
||||||
|
for task in tasks:
|
||||||
|
if current_time - task["last_run"] >= task["interval"]:
|
||||||
|
for function in task["functions"]:
|
||||||
|
function()
|
||||||
|
task["last_run"] = current_time
|
||||||
|
|
||||||
|
# Eine kurze Pause, um die CPU nicht zu überlasten
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main_loop()
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import requests
|
||||||
|
import git
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
def current_version():
|
||||||
|
current_version = open("version", "r").read()
|
||||||
|
return current_version
|
||||||
|
|
||||||
|
def get_latest_release(owner, repo):
|
||||||
|
url = f"http://gitlab.stines.de/api/v1/repos/sebastian.serfling/Agents/releases/latest"
|
||||||
|
response = requests.get(url)
|
||||||
|
response.raise_for_status()
|
||||||
|
release_info = response.json()
|
||||||
|
return release_info['name']
|
||||||
|
|
||||||
|
def check_version():
|
||||||
|
new_version = get_latest_release("", "")
|
||||||
|
if current_version() != new_version:
|
||||||
|
try:
|
||||||
|
git.Repo.clone_from("http://172.17.1.251/sebastian.serfling/Agents.git",f'../{get_latest_release("","")}')
|
||||||
|
except:
|
||||||
|
next
|
||||||
|
if os.path.isdir(f"../{new_version}"):
|
||||||
|
try:
|
||||||
|
shutil.move("../latest", f"../{current_version}")
|
||||||
|
except:
|
||||||
|
print("folder not Found")
|
||||||
|
shutil.move(f"../{new_version}", "../latest")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Get Current Version of Files -> Verionfile txt on /opt/agents/version.txt
|
||||||
|
|
||||||
|
# Check Verison on Github by Curl http://172.17.1.251/sebastian.serfling/Agents/src/branch/main/version
|
||||||
|
|
||||||
|
# IF Version same -> close
|
||||||
|
|
||||||
|
# IF not same -> Update, restart service
|
||||||
|
|
||||||
Loading…
Reference in New Issue