Progetto di un bilanciatore applicativo documentale

Progetto di un bilanciatore applicativo documentale

Marzo 12, 2024 0 Di Ruggero Grando

LA CLASSE CODA DI ELABORAZIONE

La classe coda di elaborazione contiene quei metodi di inserimento, aggiornamento e cancellazione dei record dalla coda di elaborazione. Il tutto è implementato in una tabella dal nome “queue” di un RDBMS SQLite.

import sqlite3
import base64
import requests
import os
from requests.exceptions import RequestException, HTTPError, Timeout, ConnectionError

class Coda:
    def __init__(self):
        
        self.db_path = '../ProgettoBilanciatore/bilanciatore.db'
        
        self.setup_database()
        
        self.db_connection = sqlite3.connect(self.db_path)
         
        

    def insert_queue(self, doc, pref_server,stato):
        try:
            cursor = self.db_connection.cursor()
            cursor.execute("INSERT INTO queue (document_id, server, doc_size, status,attempts) VALUES (?, ?,?,?,?)", (str(doc.documentID), pref_server, doc.getSize(),stato,1))
            self.db_connection.commit()
            
            return True
        except Exception as e:
            print(f"Errore durante l'inserimento in coda: {e}")
            self.close() 
            return False

    def update_queue(self, doc,pref_server,statopre, statoseg):
        try:
            cursor = self.db_connection.cursor()
            cursor.execute("UPDATE queue set status = ? WHERE document_id = ? and server = ? and status = ?", (str(statoseg),str(doc.documentID),str(pref_server), str(statopre)))
            self.db_connection.commit()
            
            return True
        except Exception as e:
            print(f"Errore durante la cancellazione dalla coda: {e}")
            self.close() 
            return False
        
    def getDoc_Size(self,segnaposto_stati,stato,elemento):    
        print('Sono interno metodo GetDoc_Size')
        try:        
            cursor = self.db_connection.cursor()  
            # Prepara la query SQL
            query = f"SELECT SUM(doc_size), server FROM queue WHERE status IN ({str(segnaposto_stati)}) AND server = ?"
            
            # Aggiungi il nome del server alla lista dei parametri
            parametri = stato + [elemento]
            print(parametri)
            cursor.execute(query, parametri)
            return cursor.fetchone()
            
        except Exception as e:
            print(f"Errore durante la somma dei documenti")
            self.close()  
            return None,None
                
    
    def delete_queue(self, doc, pref_server,stato):
        try:
            cursor = self.db_connection.cursor()
            cursor.execute("DELETE FROM queue WHERE document_id = ? and server = ? and status = ?", (str(doc.documentID),str(pref_server), str(stato)))
            self.db_connection.commit()
            
            return True
        except Exception as e:
            print(f"Errore durante la cancellazione dalla coda: {e}")
            self.db_connection.close()  
            return False

    def setup_database(self):
        """ Imposta il database creando il file e la tabella se non esistono. """
        db_exists = os.path.exists(self.db_path)
        #db_exists = False
        conn = sqlite3.connect(self.db_path)
        if not db_exists:
            try:
                conn.execute('''CREATE TABLE queue (
                                    document_id INTEGER PRIMARY KEY,
                                    server TEXT NOT NULL,
                                    doc_size INTEGER NOT NULL,
                                    status TEXT NOT NULL
                                );''')
                print("Database e tabella 'queue' creati con successo.")
            except sqlite3.Error as e:
                print(f"Errore nella creazione del database: {e}")
        conn.close()
    def close(self):
        self.db_connection.close()    

I metodi insert_queue, update_queue, delete_queue gestiscono le operazioni sulla coda di documenti nel database (inserimento, aggiornamento e cancellazione). Ciò, mi permette di determinare un flusso di invio dei documenti con degli stati diversi.

Il metodo setup_database imposta il database, creando il file e la tabella necessari se non esistono.

Pagina Successiva | Pagina Precedente

No votes yet.
Please wait...

Pagine: 1 2 3 4 5 6 7 8 9 10 11