add refresh_api to jenkinsfile
This commit is contained in:
@ -1,2 +1,3 @@
|
||||
Flask
|
||||
psutil
|
||||
flask_apscheduler
|
||||
psutil
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
###############################################
|
||||
|
||||
- name: set up python venv
|
||||
when: not refresh_api | bool
|
||||
include_tasks: python_venv.yaml
|
||||
|
||||
- name: build python exe
|
||||
@ -14,6 +15,7 @@
|
||||
include_tasks: nssm.yaml
|
||||
|
||||
- name: set up scheduled task
|
||||
when: false
|
||||
include_tasks: update_task.yaml
|
||||
|
||||
...
|
||||
@ -1,19 +1,21 @@
|
||||
---
|
||||
- name: skip when refresh
|
||||
when: not refresh_api | bool
|
||||
block:
|
||||
- name: Copy CrystalDiskInfo archive
|
||||
ansible.windows.win_copy:
|
||||
src: /var/jenkins_home/ansible-files/programs/CrystalDiskInfo.zip
|
||||
dest: "{{ storage_api_root }}\\CrystalDiskInfo.zip"
|
||||
|
||||
- name: Copy CrystalDiskInfo archive
|
||||
ansible.windows.win_copy:
|
||||
src: /var/jenkins_home/ansible-files/programs/CrystalDiskInfo.zip
|
||||
dest: "{{ storage_api_root }}\\CrystalDiskInfo.zip"
|
||||
- name: Extract CrystalDiskInfo archive
|
||||
community.windows.win_unzip:
|
||||
src: "{{ storage_api_root }}\\CrystalDiskInfo.zip"
|
||||
dest: "{{ storage_api_root }}\\dist\\"
|
||||
|
||||
- name: Extract CrystalDiskInfo archive
|
||||
community.windows.win_unzip:
|
||||
src: "{{ storage_api_root }}\\CrystalDiskInfo.zip"
|
||||
dest: "{{ storage_api_root }}\\dist\\"
|
||||
|
||||
- name: Install nssm
|
||||
win_chocolatey:
|
||||
name: nssm
|
||||
state: present
|
||||
- name: Install nssm
|
||||
win_chocolatey:
|
||||
name: nssm
|
||||
state: present
|
||||
|
||||
- name: Install disk_api service
|
||||
community.windows.win_nssm:
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
---
|
||||
|
||||
- name: Create service working folder
|
||||
when: not refresh_api | bool
|
||||
ansible.windows.win_file:
|
||||
path: "{{ storage_api_root }}"
|
||||
state: directory
|
||||
@ -25,6 +26,7 @@
|
||||
dest: "{{ storage_api_root }}\\disk_service.py"
|
||||
|
||||
- name: install pyinstaller
|
||||
when: not refresh_api | bool
|
||||
win_shell: "{{ python_venv_bin }} -m pip install pyinstaller"
|
||||
|
||||
- name: compile binary
|
||||
@ -34,6 +36,7 @@
|
||||
chdir: "{{ storage_api_root }}"
|
||||
|
||||
- name: Open up port 5000
|
||||
when: not refresh_api | bool
|
||||
community.windows.win_firewall_rule:
|
||||
name: _ansible_python_disk_service
|
||||
description: "Firewall rule to allow traffic for Disk info API"
|
||||
|
||||
@ -1,8 +1,12 @@
|
||||
from flask import Flask, jsonify
|
||||
from flask_apscheduler import APScheduler
|
||||
import psutil
|
||||
import os
|
||||
import requests, json
|
||||
from subprocess import check_output
|
||||
|
||||
app = Flask(__name__)
|
||||
scheduler = APScheduler()
|
||||
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True
|
||||
|
||||
# Bits to Bytes etc
|
||||
@ -38,7 +42,8 @@ def get_crystal_disk_info():
|
||||
"Power On Count": None,
|
||||
"Host Writes": None,
|
||||
"Wear Level Count": None,
|
||||
"Drive Letter": None
|
||||
"Drive Letter": None,
|
||||
"Interface": None
|
||||
}
|
||||
for line in lines:
|
||||
if "Model" in line:
|
||||
@ -74,6 +79,9 @@ def get_crystal_disk_info():
|
||||
elif "Disk Size" in line:
|
||||
if ":" in line:
|
||||
data["Disk Size"] = line.split(":", 1)[1].strip()
|
||||
elif "Interface" in line:
|
||||
if ":" in line:
|
||||
data["Disk Size"] = line.split(":", 1)[1].strip()
|
||||
|
||||
if any(value is not None for value in data.values()):
|
||||
drives.append(data)
|
||||
@ -113,5 +121,36 @@ def disk():
|
||||
def drive_health():
|
||||
return jsonify(get_crystal_disk_info())
|
||||
|
||||
def server_reporter():
|
||||
base_url="http://172.25.1.18:5001/client_update"
|
||||
url = f"{base_url}/process"
|
||||
data_dict = get_crystal_disk_info()
|
||||
response = requests.post(url, json=data_dict)
|
||||
|
||||
# Raise an exception for non‑2xx status codes
|
||||
response.raise_for_status()
|
||||
|
||||
# Return the JSON payload
|
||||
return response.json()
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
# Background Loop Function
|
||||
# That makes this the service loop
|
||||
def background_loop():
|
||||
diskinfo_command = f"{{ storage_api_root }}\\dist\\DiskInfo64.exe /CopyExit"
|
||||
result = check_output(diskinfo_command, shell=True)
|
||||
print(result)
|
||||
server_reporter()
|
||||
return result
|
||||
|
||||
scheduler.add_job(id='background_loop',
|
||||
func=background_loop,
|
||||
trigger='interval',
|
||||
seconds=60)
|
||||
scheduler.init_app(app)
|
||||
scheduler.start()
|
||||
|
||||
background_loop()
|
||||
|
||||
app.run(host='0.0.0.0', port={{ api_service_port }})
|
||||
|
||||
Reference in New Issue
Block a user