Passa al contenuto principale

PROAI-FRAMEWORK

Raccolta di informazioni utili ad impostare e lavorare con ProAi-Framework.

STRUTTURA FILE

Ai fini di spiegare come installare e come utilizzare il servizio verrà utilizzata questa struttura file, che verrà definita per la guida come "Path base" per tutte quelle che saranno le operazioni di rilascio.

alt text

IL SERVIZIO

O in questo caso I servizi, proai-framework infatti è diviso in 3 funzioni differenti, ognuna con uno specifico script .bat da cui lanciarla. Tutte e tre le funzioni svolgono operazioni separate, per questo motivo si è scelto di dividerle.

ProAi-Server

Function:

  • Richieste a ChatGPT
  • Salvataggio in database dei dati utili alla predizione

Report

Function:

  • Generazione di report e conseguente invio per mail dello stesso

Requirements:

  • [ProBi] In particolare l' exportServer ovvero il servizio che crea le immagini dei grafici a partire dai dati ottenuti dal servizio ProBi.
  • [SMTP] I report vengono inviati per mail, è necessario quindi che il servizio smtp in cloud sia attivo e funzionante per poter completare l'operazione.

Telegram / Telegram Auth

Function:

  • Gestisce le interazioni con il bot telegram, l'autenticazione è necessaria in almeno una macchina virtuale al momento per inserire gli utenti autorizzati a scrivere al Bot

Requirements:

  • [ProAi-Server] Visto che tra le funzioni del bot c'è quella di interpretare e commentare i grafici richiesti abbiamo bisogno di questo servizio per poter interrogare ChatGPT.
  • [ProBi] In particolare l' exportServer ovvero il servizio che crea le immagini dei grafici a partire dai dati ottenuti dal servizio ProBi.

DEPLOY

Tutti i file e le cartelle sono presenti nella repository git di ProAi-Framework, vengono spiegati in forma testuale per uma maggiore chiarezza.

Tutti i servizi sono stati pensati per avere separati di file di configurazione e la cartella "data", in questo modo l'aggiornamento viene notevolmente semplificato. Per installarlo da un cliente ci basta avere in C:\PROROB\bin\pronet-iot\proai-framework questa struttura:

proai-framework
├── lib
├── res
├── scripts
├── src
|
└── requirement.txt

Di default il file aggiuntivo "config.json" non è presente, questo perchè in mancanza tutti i servizi automaticamente andranno a recuperare le loro configurazioni da C:\PROROB\config\proai. In caso si voglia modificare il path per salvare i file da qualche altra parte la struttura è la seguente:

{
"config_path":"C:\\PROROB\\config"
}

Visto che nella maggior parte dei clienti la struttura della ROOT folder è definita e uguale, si consiglia di non mettere nessun file.

Configuration folder

La cartella delle configurazioni di ProAi-Framework è strutturata in questo modo:

config\proai
├── launch
├── services
|
├── path.json
└── .env
  • .env
    Contiene tutte le chiavi di telegram e openAi.

  • path.json
    Specifica dove salvare i log o i file del database, presenta la seguente struttura:

    {
    "logs_path": "C:\\PROROB\\logs\\proai",
    "data_path":"C:\\PROROB\\data\\proai"
    }

    Anche in questo caso vengono fornite le impostazioni di "Base" da utilizzare per la maggior parte dei clienti.

  • services
    Ogni servizio ha il suo json di configurazioni, idealmente quindi se da un cliente un servizio non è abilitato non servirà compilare il corrispettivo file di configurazione, gran parte delle configurazioni in realtà non va modificato, in quanto sono informazioni globali e costanti, bisogna invece fare attenzione principalmente agli URL, in quanto sono quelle che vanno a scegliere a quale servizio fare le richieste.

ATTENZIONE
Al momento le configurazioni in release del servizio telegram sono contenute in telegram_bot_dev.json.

Installazione

  1. Scaricare e installare i programmi necessari

    • Python (ver. 3.11)
    • Git
    • (Facoltativo) Timeseries e PostgreSQL
  2. Creare un ambiente virtuale python in C:\PROROB\bin_srv\python-env\proai

  3. Scaricare tutti i pacchetti python necessari (una volta attivato il venv) usando:

    pip install -r requirement.txt

    Il file requirement come visto prima sarà collocato nella cartella di proai-framework

  4. Per testare i servizi necessari sarà sufficiente eseguire gli script ".bat" collocati in /script/launchers

Timeseries

  1. Per le timeseries è necessario scaricare i due pacchetti aggiunti che contengono tutti i file. Questi possono essere scaricati dai seguenti link

    https://github.com/timescale/timescaledb/releases/latest/download/timescaledb-postgresql-15-windows-amd64.zip
    https://sbp.enterprisedb.com/getfile.jsp?fileid=1259022

    O dal cloud, andranno quindi estratti entrambi in C:\PROROB\bin_srv\.

  2. Poi é necessario runnare install_and_run dalla cartella C:\PROROB\bin\ProNet-IoT\proai-framework\scripts\timescaledb

  3. Le configurazioni del servizio saranno poi disponinili in:

    • C:\PROROB\config\proai\.env
    • C:\PROROB\config\proai\services\proai.json
  4. Quando probi viene lanciato, creera la tabella, che poi verra visualizzata in pgAdmin in: Local > Databases > postgress > Schemas > public > Tables > kpi_history

  5. In PROROB/utility dovrebbe essercci nssm che seerve per installare ProAI Framework come servizio, con le seguenti impostazioni:

Alt text

Path: C:\PROROB\bin\ProNet-IoT\proai-framework\scripts\launchers\run_proai_server.cmd

Cartella di avvio: C:\PROROB\bin\ProNet-IoT\proai-framework\scripts\launchers\

INTEGRATION

Collection of entry point, useful function and all the tool necessary to utilise or integrate the various ProAi-Framework's function.

Storicization

ProAi-Framework include tutta la logica per interagire con database PostgreSQL. Affinché queste funzionalità operino correttamente, PostgreSQL deve essere stato precedentemente installato e configurato sulla macchina, seguendo le istruzioni fornite nella guida all'installazione.

Attraverso specifici endpoint API forniti dal framework, è possibile utilizzare operazioni comuni sul database, come la creazione di tabelle, l'inserimento di dati e la verifica dell'esistenza di tabelle.

La documentazione offre un esempio dell'URL di base:

"BASE_URL": "http://127.0.0.1:5000/api/v1"

[POST] Check table

Controlla se una specifica tabella sia presente o meno nel database. L'operazione è utile per evitare di creare la tabella quando non necessario.

URL:

<BASE_URL>"/time_series/check_table"

BODY:

{
"table_name":"table_example_name"
}

C# EXAMPLE:

\ProBi\Supervisor\Supervisor.Bi.Analytics.DataHistoricizer.TimeScaleDb.cs
var data = new Dictionary<string, object>
{
{"table_name", Config.TimeSeriesConfig.TableName}
};

response = ProRest.SendRequest(HttpMethod.Post, Config.TimeSeriesConfig.BaseUrl + "/time_series/check_table", data: data);

[POST] Table Creation

URL:

<BASE_URL>"/time_series/create_table"

BODY:

{
"column_name":[
"column_example_name"
],
"column_types":[
"INT"
],
"table_name":"table_example_name"
}

C# EXAMPLE:

\ProBi\Supervisor\Supervisor.Bi.Analytics.DataHistoricizer.TimeScaleDb.cs
var tableToCreate = new Dictionary<string, object>
{
{"column_names", new List<string>{ "kl_kp_id","kl_subject_id","kl_value","kl_target_low_bound","kl_target_high_bound", "timestamp"} },
{ "column_types", new List<string> { "INT", "INT", "FLOAT", "FLOAT", "FLOAT", "TIMESTAMP" }},
{ "table_name", Config.TimeSeriesConfig.TableName }
};

response = ProRest.SendRequest(HttpMethod.Post, Config.TimeSeriesConfig.BaseUrl + "/time_series/create_table", data: tableToCreate);

[POST] Continuos Aggregation

Abilita l'aggregazione continua per la storicizzazione (questa operazione non è obbligatoria per salvare i dati nel database) per una specifica tabella. Dovrebbe essere eseguita solo al momento della sua creazione.

URL:

<BASE_URL>"/time_series/create_continuous_aggregate"

BODY:

{
"source_table":"string",
"aggregation_values": ["string_list","column_to_aggregate"],
"aggregation_metrics": ["string_list","aggregation_type","AVG","MIN"],
"date_column": "string (name of column with time parameter)",
"aggregation_interval": "string (time interval)",
"group_by_list":["string_list","column_to_groupby"]
}

C# EXAMPLE:

\ProBi\Supervisor\Supervisor.Bi.Analytics.DataHistoricizer.TimeScaleDb.cs
var tableConfig = new Dictionary<string, object>
{
{ "source_table", Config.TimeSeriesConfig.TableName},
{ "aggregation_values", new List<string>{ "kl_value", "kl_target_low_bound", "kl_target_high_bound"} },
{ "aggregation_metrics", new List<string>{"AVG", "AVG", "AVG" } },
{ "date_column", "timestamp" },
{ "aggregation_interval", "15 minutes"},
{ "group_by_list", new List<string>{"kl_kp_id", "kl_subject_id"}}
};

response = ProRest.SendRequest(HttpMethod.Post, Config.TimeSeriesConfig.BaseUrl + "/time_series/create_continuous_aggregate", data: tableConfig);

[POST] Insert in Table

URL:

<BASE_URL>"/time_series/insert_data"

BODY:

{
"table_name":"table_example_name",
"data":{
"column_example_name":1
}
}

C# EXAMPLE:

\ProBi\Supervisor\Supervisor.Bi.Analytics.DataHistoricizer.TimeScaleDb.cs
var data = new Dictionary<string, object>
{
{
"table_name",
Config.TimeSeriesConfig.TableName
},
{
"data",
new Dictionary<string, object>{
{ "kl_kp_id", kpId },
{ "kl_subject_id", subjectId } ,
{ "kl_value", value },
{ "kl_target_low_bound", targetHighBound},
{ "kl_target_high_bound", targetHighBound},
{ "timestamp", time.ToString("yyyy-MM-dd HH:mm:ss")},
}
}
};

response = ProRest.SendRequest(HttpMethod.Post, Config.TimeSeriesConfig.BaseUrl + "/time_series/insert_data", data: data);