add table and image status
This commit is contained in:
parent
e839f3346c
commit
5034067fd9
40
natalie.py
40
natalie.py
|
@ -1,12 +1,14 @@
|
||||||
import sys
|
import sys
|
||||||
from PyQt6.QtWidgets import (QApplication, QListWidgetItem)
|
from PyQt6.QtWidgets import (QApplication, QListWidgetItem, QTableWidgetItem)
|
||||||
from PyQt6.QtCore import Qt
|
from PyQt6.QtCore import Qt
|
||||||
from portainer_api import PortainerService
|
from portainer_api import PortainerService
|
||||||
from gui.portainer_ui import PortainerUi
|
|
||||||
from config.settings import PortainerConfig
|
from config.settings import PortainerConfig
|
||||||
|
from gui.portainer_ui import PortainerUi
|
||||||
|
from gui.dialog_box_ui import DialogBox
|
||||||
|
|
||||||
from gui.workers.load_stacks_worker import LoadStacksWorker
|
from gui.workers.load_stacks_worker import LoadStacksWorker
|
||||||
from gui.workers.load_endpoints_worker import LoadEndpointsWorker
|
from gui.workers.load_endpoints_worker import LoadEndpointsWorker
|
||||||
|
from gui.workers.load_container_image_status_worker import LoadContainerImageStatusWorker
|
||||||
|
|
||||||
from utils.date_converter import datetime_from_timestamp
|
from utils.date_converter import datetime_from_timestamp
|
||||||
from utils.endpoint_converter import endpoint_id_to_name_converter
|
from utils.endpoint_converter import endpoint_id_to_name_converter
|
||||||
|
@ -15,6 +17,8 @@ from utils.endpoint_converter import endpoint_id_to_name_converter
|
||||||
class Natalie(PortainerUi):
|
class Natalie(PortainerUi):
|
||||||
def __init__(self, portainer_url, portainer_token):
|
def __init__(self, portainer_url, portainer_token):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
self.image_status_worker = None
|
||||||
|
self.stack_webhook = None
|
||||||
self.endpoints_list = None
|
self.endpoints_list = None
|
||||||
self.main_window.resize(800, 600)
|
self.main_window.resize(800, 600)
|
||||||
self.portainer = PortainerService(portainer_url, portainer_token)
|
self.portainer = PortainerService(portainer_url, portainer_token)
|
||||||
|
@ -27,10 +31,10 @@ class Natalie(PortainerUi):
|
||||||
self.stacks_worker.error_occurred.connect(self.error_occurred)
|
self.stacks_worker.error_occurred.connect(self.error_occurred)
|
||||||
self.stacks_worker.start()
|
self.stacks_worker.start()
|
||||||
self.stacks_list.itemClicked.connect(self.load_stack)
|
self.stacks_list.itemClicked.connect(self.load_stack)
|
||||||
|
self.update.clicked.connect(self.update_stack)
|
||||||
|
|
||||||
def load_endpoints(self, endpoints):
|
def load_endpoints(self, endpoints):
|
||||||
self.endpoints_list = endpoints
|
self.endpoints_list = endpoints
|
||||||
print(self.endpoints_list)
|
|
||||||
self.combo_box.clear()
|
self.combo_box.clear()
|
||||||
self.combo_box.addItem("All")
|
self.combo_box.addItem("All")
|
||||||
for endpoint in endpoints:
|
for endpoint in endpoints:
|
||||||
|
@ -45,14 +49,40 @@ class Natalie(PortainerUi):
|
||||||
self.stacks_list.addItem(item)
|
self.stacks_list.addItem(item)
|
||||||
|
|
||||||
def load_stack(self, item):
|
def load_stack(self, item):
|
||||||
|
self.containers_table.setRowCount(0)
|
||||||
|
self.containers_table.clearContents()
|
||||||
|
self.progress_bar.setRange(0, 0)
|
||||||
|
self.progress_bar.show()
|
||||||
data = item.data(Qt.ItemDataRole.UserRole)
|
data = item.data(Qt.ItemDataRole.UserRole)
|
||||||
print(data)
|
|
||||||
self.stack_name_label.setText(data['name'])
|
self.stack_name_label.setText(data['name'])
|
||||||
self.endpoint_label.setText(endpoint_id_to_name_converter(self.endpoints_list, data['endpoint_id']))
|
endpoint_id = data['endpoint_id']
|
||||||
|
self.endpoint_label.setText(endpoint_id_to_name_converter(self.endpoints_list, endpoint_id))
|
||||||
self.created_by_label.setText(data['created_by'])
|
self.created_by_label.setText(data['created_by'])
|
||||||
self.creation_date_label.setText(datetime_from_timestamp(data['creation_date']))
|
self.creation_date_label.setText(datetime_from_timestamp(data['creation_date']))
|
||||||
self.updated_by_label.setText(data['updated_by'])
|
self.updated_by_label.setText(data['updated_by'])
|
||||||
self.update_date_label.setText(datetime_from_timestamp(data['update_date']))
|
self.update_date_label.setText(datetime_from_timestamp(data['update_date']))
|
||||||
|
self.stack_webhook = data['webhook']
|
||||||
|
containers = self.portainer.containers.list_containers_of_stack(endpoint_id, data['name'])
|
||||||
|
self.containers_table.setRowCount(len(containers))
|
||||||
|
for i, container in enumerate(containers):
|
||||||
|
self.image_status_worker = LoadContainerImageStatusWorker(self.portainer, endpoint_id, container['id'])
|
||||||
|
self.containers_table.setItem(i, 0, QTableWidgetItem(container['name']))
|
||||||
|
self.containers_table.setItem(i, 1, QTableWidgetItem(container['image']))
|
||||||
|
self.containers_table.setItem(i, 2, QTableWidgetItem(container['status']))
|
||||||
|
self.containers_table.setItem(i, 3, QTableWidgetItem('Loading...'))
|
||||||
|
image_status_worker = LoadContainerImageStatusWorker(self.portainer, endpoint_id, container['id'])
|
||||||
|
image_status_worker.image_status_retrieved.connect(lambda status, row=i: self.update_image_status(row, status))
|
||||||
|
image_status_worker.start()
|
||||||
|
self.image_status_worker = image_status_worker
|
||||||
|
self.progress_bar.hide()
|
||||||
|
|
||||||
|
def update_image_status(self, row, status):
|
||||||
|
self.containers_table.setItem(row, 3, QTableWidgetItem(status))
|
||||||
|
|
||||||
|
def update_stack(self):
|
||||||
|
self.portainer.stacks.update_stack(self.stack_webhook)
|
||||||
|
dialog_box = DialogBox("Update Stack", "Stack updated successfully.")
|
||||||
|
dialog_box.exec()
|
||||||
|
|
||||||
def error_occurred(self, error_message):
|
def error_occurred(self, error_message):
|
||||||
print(f"Error occurred: {error_message}")
|
print(f"Error occurred: {error_message}")
|
||||||
|
|
Loading…
Reference in a new issue