remove other than hooks
This commit is contained in:
parent
c871e4d99d
commit
4f663bb7a5
68
installer.sh
68
installer.sh
@ -1,68 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Define variables for easier modifications and readability
|
|
||||||
GIT_REPO="https://git.maxprint.io/MaxApex/ticket_ai_flask_app.git"
|
|
||||||
APP_DIR="/opt/ticket-ai"
|
|
||||||
VENV_DIR="$APP_DIR/venv"
|
|
||||||
SERVICE_FILE="/etc/systemd/system/ticket-ai.service"
|
|
||||||
PYTHON_BIN="$VENV_DIR/bin/python3"
|
|
||||||
ACTIVATE_SCRIPT="$VENV_DIR/bin/activate"
|
|
||||||
IPTABLES_RULES=("83.136.253.122") # Add IPs as needed
|
|
||||||
|
|
||||||
# Ensure the script is run as root
|
|
||||||
if [ "$(id -u)" != "0" ]; then
|
|
||||||
echo "This script must be run as root" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Installing git
|
|
||||||
yum install -y git || { echo "Failed to install git. Exiting."; exit 1; }
|
|
||||||
|
|
||||||
# Clone the repository if it doesn't exist
|
|
||||||
if [ ! -d "$APP_DIR" ]; then
|
|
||||||
git clone $GIT_REPO $APP_DIR || { echo "Failed to clone repository. Exiting."; exit 1; }
|
|
||||||
else
|
|
||||||
echo "$APP_DIR already exists. Skipping clone."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Navigate to the repo directory
|
|
||||||
cd $APP_DIR || { echo "Failed to navigate to $APP_DIR. Exiting."; exit 1; }
|
|
||||||
|
|
||||||
# Create virtual environment if it doesn't exist
|
|
||||||
if [ ! -d "$VENV_DIR" ]; then
|
|
||||||
python3 -m venv $VENV_DIR
|
|
||||||
else
|
|
||||||
echo "$VENV_DIR already exists. Skipping virtual environment creation."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Activate virtual environment and install dependencies
|
|
||||||
source $ACTIVATE_SCRIPT
|
|
||||||
pip install Flask flask_jwt_extended || { echo "Failed to install Flask or flask_jwt_extended. Exiting."; exit 1; }
|
|
||||||
|
|
||||||
# Create systemd service file
|
|
||||||
cat <<EOF > $SERVICE_FILE
|
|
||||||
[Unit]
|
|
||||||
Description=Ticket AI
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
ExecStart=$PYTHON_BIN $APP_DIR/src/app.py
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Reload systemd to recognize the new service and start it
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl start ticket-ai.service || { echo "Failed to start ticket-ai.service. Exiting."; exit 1; }
|
|
||||||
|
|
||||||
# Add firewall rules to accept traffic
|
|
||||||
for IP in "${IPTABLES_RULES[@]}"; do
|
|
||||||
iptables -A INPUT -p tcp -m tcp -s $IP --dport 5000 -j ACCEPT
|
|
||||||
done
|
|
||||||
|
|
||||||
# Save iptables rules and restart the service to apply changes
|
|
||||||
service iptables save
|
|
||||||
service iptables restart || { echo "Failed to restart iptables. Exiting."; exit 1; }
|
|
||||||
|
|
||||||
echo "Setup completed successfully."
|
|
||||||
@ -1 +0,0 @@
|
|||||||
this is a error log from file 'A'
|
|
||||||
@ -1 +0,0 @@
|
|||||||
this is a error log from file 'B'
|
|
||||||
22
readme.md
22
readme.md
@ -1,22 +0,0 @@
|
|||||||
# install packages
|
|
||||||
pip install Flask
|
|
||||||
pip install flask_jwt_extended
|
|
||||||
|
|
||||||
# run application
|
|
||||||
python app.py
|
|
||||||
|
|
||||||
# call api
|
|
||||||
http://127.0.0.1:5000/get_logs?issue_type=Demo
|
|
||||||
|
|
||||||
# sample response
|
|
||||||
{
|
|
||||||
"/var/log/db.log": "Last 50 lines of db.log...",
|
|
||||||
"/var/log/db_error.log": "Last 30 lines of db_error.log...",
|
|
||||||
"top": "Output of the top command..."
|
|
||||||
}
|
|
||||||
|
|
||||||
# run installation script
|
|
||||||
./install.sh
|
|
||||||
|
|
||||||
# run application
|
|
||||||
./run.sh
|
|
||||||
59
src/app.py
59
src/app.py
@ -1,59 +0,0 @@
|
|||||||
from flask import Flask, request, jsonify
|
|
||||||
import json
|
|
||||||
import subprocess
|
|
||||||
from flask_jwt_extended import JWTManager, create_access_token
|
|
||||||
import os
|
|
||||||
import datetime
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
|
|
||||||
# Setup the Flask-JWT-Extended extension
|
|
||||||
app.config["JWT_SECRET_KEY"] = os.environ.get("JWT_SECRET_KEY", "default-secret-key")
|
|
||||||
jwt = JWTManager(app)
|
|
||||||
|
|
||||||
def split_directory_and_file(path):
|
|
||||||
directory, file_with_wildcard = os.path.split(path)
|
|
||||||
file_name = file_with_wildcard.split('*')[0] # Get the part before the wildcard
|
|
||||||
return directory, file_name
|
|
||||||
|
|
||||||
def read_log_from_dir(dir_path, pattern, lines):
|
|
||||||
ret_var = ""
|
|
||||||
three_hours_ago = datetime.datetime.now() - datetime.timedelta(hours=3)
|
|
||||||
log_files = [f for f in os.listdir(dir_path) if pattern in f and datetime.datetime.fromtimestamp(os.path.getmtime(os.path.join(dir_path, f))) > three_hours_ago]
|
|
||||||
for file_name in log_files:
|
|
||||||
file_path = os.path.join(dir_path, file_name)
|
|
||||||
ret_var += f"{file_name}\n{subprocess.check_output(['tail', '-n', str(lines), file_path]).decode('utf-8')}\n\n"
|
|
||||||
return ret_var
|
|
||||||
|
|
||||||
def read_log(log_file, lines):
|
|
||||||
return subprocess.check_output(['tail', '-n', str(lines), log_file]).decode('utf-8')
|
|
||||||
|
|
||||||
def read_top():
|
|
||||||
return subprocess.check_output(['top', '-b', '-n', '1']).decode('utf-8')
|
|
||||||
|
|
||||||
@app.route('/login', methods=['POST'])
|
|
||||||
def login():
|
|
||||||
username = request.json.get("username")
|
|
||||||
password = request.json.get("password")
|
|
||||||
if username != "admin" or password != "password":
|
|
||||||
return jsonify({"msg": "Bad username or password"}), 401
|
|
||||||
access_token = create_access_token(identity=username)
|
|
||||||
return jsonify(access_token=access_token)
|
|
||||||
|
|
||||||
@app.route('/get_logs', methods=['GET'])
|
|
||||||
def get_logs():
|
|
||||||
issue_type = request.args.get("issue_type")
|
|
||||||
try:
|
|
||||||
with open('/opt/ticket-ai/src/config.json') as config_file:
|
|
||||||
config = json.load(config_file)
|
|
||||||
if issue_type not in config:
|
|
||||||
return jsonify({"error": "Invalid issue type"})
|
|
||||||
issue_config = config[issue_type]
|
|
||||||
response = {log.get('log_file').split('*')[0]: read_log_from_dir(*split_directory_and_file(log.get('log_file')), log['lines']) if '*' in log.get('log_file') else read_log(log['log_file'], log['lines']) for log in issue_config['logs']}
|
|
||||||
response.update({comm.get('tag'): os.popen(comm.get('comm')).read() for comm in issue_config['commands']})
|
|
||||||
except Exception as e:
|
|
||||||
return jsonify({"error": str(e)})
|
|
||||||
return jsonify(response)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
app.run(debug=True, host="0.0.0.0")
|
|
||||||
111
src/config.json
111
src/config.json
@ -1,111 +0,0 @@
|
|||||||
{
|
|
||||||
"--Select Issue Type--": {
|
|
||||||
"commands": [],
|
|
||||||
"logs": []
|
|
||||||
},
|
|
||||||
"Password Reset Request": {
|
|
||||||
"commands": [],
|
|
||||||
"logs": []
|
|
||||||
},
|
|
||||||
"Domain Mapping": {
|
|
||||||
"commands": [],
|
|
||||||
"logs": []
|
|
||||||
},
|
|
||||||
"Wallet/Reverse Proxy Required": {
|
|
||||||
"commands": [],
|
|
||||||
"logs": []
|
|
||||||
},
|
|
||||||
"Others": {
|
|
||||||
"commands": [],
|
|
||||||
"logs": []
|
|
||||||
},
|
|
||||||
"Email Problem": {
|
|
||||||
"commands": [],
|
|
||||||
"logs": [
|
|
||||||
{
|
|
||||||
"log_file": "/var/log/messages",
|
|
||||||
"lines": 50
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Jasper Reports": {
|
|
||||||
"commands": [
|
|
||||||
{
|
|
||||||
"comm": "top -b -n 1",
|
|
||||||
"tag": "top"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"logs": [
|
|
||||||
{
|
|
||||||
"log_file": "/opt/tomcat/logs/catalina.out",
|
|
||||||
"lines": 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"log_file": "/var/log/messages",
|
|
||||||
"lines": 50
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Server Unavailable": {
|
|
||||||
"commands": [],
|
|
||||||
"logs": [
|
|
||||||
{
|
|
||||||
"log_file": "/opt/tomcat/logs/catalina.out",
|
|
||||||
"lines": 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"log_file": "/opt/oracle/diag/rdbms/xe/XE/trace/alert_XE.log",
|
|
||||||
"lines": 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"log_file": "/var/log/messages",
|
|
||||||
"lines": 50
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Demo1": {
|
|
||||||
"commands": [],
|
|
||||||
"logs": [
|
|
||||||
{
|
|
||||||
"log_file": "/home/arehman/Documents/Projects/Python/Maxapex/ticket_ai_flask_app/logs/*_error.log",
|
|
||||||
"lines": 50
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Demo2": {
|
|
||||||
"commands": [],
|
|
||||||
"logs": [
|
|
||||||
{
|
|
||||||
"log_file": "/home/arehman/Documents/Projects/Python/Maxapex/ticket_ai_flask_app/logs/a_error.log",
|
|
||||||
"lines": 50
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Demo3": {
|
|
||||||
"commands": [
|
|
||||||
{
|
|
||||||
"comm": "top -b -n 1",
|
|
||||||
"tag": "top"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"logs": []
|
|
||||||
},
|
|
||||||
"Demo": {
|
|
||||||
"commands": [
|
|
||||||
{
|
|
||||||
"comm": "top -b -n 1",
|
|
||||||
"tag": "top"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"logs": [
|
|
||||||
{
|
|
||||||
"log_file": "/home/arehman/Documents/Projects/Python/Maxapex/ticket_ai_flask_app/logs/a_error.log",
|
|
||||||
"lines": 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"log_file": "/home/arehman/Documents/Projects/Python/Maxapex/ticket_ai_flask_app/logs/*_error.log",
|
|
||||||
"lines": 50
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user