Cette section présente des méthodes sur un objet Connection
pour gérer les processes dans l'instance et les tasks dans le graphset actuel.
Chaque exemple se concentre uniquement sur l'utilisation de la méthode. Pour un exemple de code complet, veuillez vous référer à l'Exemple Complet.
Process
Toutes les requêtes UQL, à l'exception des algorithmes exécutés avec la méthode write()
, sont exécutées en tant que processes. Les résultats de ces processes sont renvoyés au client une fois terminés et ne sont pas stockés.
top()
Récupère tous les processes en cours d'exécution et en arrêt de l'instance.
Paramètres :
RequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: La liste de tous les processes dans l'instance.
// Récupère tous les processes en cours d'exécution et en arrêt dans l'instance
let resp = await conn.top();
console.log(resp.data);
[
{
process_id: 'a_0_1519_2',
status: 'RUNNING',
process_uql: 'n().e().n().e().n().e().n() as p return count(p)',
duration: '7'
}
]
kill()
Met fin aux processes en cours d'exécution dans l'instance.
Paramètres :
string
(Optionnel) : ID du process à terminer ; mettre*
pour arrêter tous les processes.boolean
(Optionnel) : Définir sur true pour ignorer l'ID du process et arrêter tous les processes.RequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête.
// Récupère tous les processes en cours d'exécution et en arrêt dans l'instance et les arrête tous
let resp1 = await conn.top();
let processList = resp1.data.map((item) => [
item.process_id,
item.process_uql,
]);
console.log(processList);
let resp = await conn.kill("*");
console.log(resp.status.code_desc);
[
[ 'a_2_1542_2', 'n().e().n().e().n().e().n() as p return count(p)' ],
[ 'a_6_1597_2', 'n().e().n().e().n()as p return count(p)' ]
]
SUCCESS
Task
Les algorithmes exécutés avec la méthode write()
sont exécutés en tant que tasks. Ces tasks sont stockées dans le graphset contre lequel elles sont exécutées jusqu'à leur suppression.
showTask()
Récupère les tasks du graphset actuel.
Paramètres :
string
(Optionnel) : Nom de l'algorithme ou ID de la task à récupérer.RequestType.TASK_STATUS
(Optionnel) : Statut de la task.RequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Task[]
: La liste de toutes les tasks dans le graphset.
let requestConfig = <RequestType.RequestConfig>{
useMaster: true,
graphSetName: "miniCircle",
};
// Exécute un algorithme en tant que task dans le graphset 'miniCircle'
let algoTest = await conn.uql(
"algo(degree).params({order: 'desc'}).write({file:{filename: 'degree_all'}})",
requestConfig
);
// Récupère la task ci-dessus et montre les informations de la task
let taskInfo = algoTest.data?.get(0).asTable();
let taskId = taskInfo.getRows()[0][0];
await sleep(3000);
let resp = await conn.showTask(
taskId,
RequestType.TASK_STATUS.TASK_DONE,
requestConfig
);
console.log("Task ID: ", taskId);
console.log(
"Algo name: ",
resp.data.map((item) => item.task_info.algo_name)
);
console.log(
"Task result: ",
resp.data.map((item) => item.result)
);
Task ID: 54252
Algo Name: degree
Task Result: {
total_degree: '591.000000',
avarage_degree: '1.944079',
result_files: 'degree_all'
}
clearTask()
Efface (Supprime) des tasks du graphset actuel. Les tasks avec le statut COMPUTING
et WRITING
ne peuvent pas être effacées.
Paramètres :
string
(Optionnel) : Nom de l'algorithme ou ID de la task à récupérer.RequestType.TASK_STATUS
(Optionnel) : Statut de la task.RequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête.
let requestConfig = <RequestType.RequestConfig>{
useMaster: true,
graphSetName: "miniCircle",
};
// Exécute un algorithme en tant que task dans le graphset 'miniCircle'
let algoTest = await conn.uql(
"algo(degree).params({order: 'desc'}).write({file:{filename: 'degree_all'}})",
requestConfig
);
// Efface la task ci-dessus et affiche le code d'erreur
let taskInfo = algoTest.data?.get(0).asTable();
let taskId = taskInfo.getRows()[0][0];
let resp = await conn.clearTask(
taskId,
RequestType.TASK_STATUS.TASK_DONE,
requestConfig
);
console.log("Task ID: ", taskId);
console.log("Task cleared: ", resp.status.code_desc);
Task ID: 60451
Task cleared: SUCCESS
stopTask()
Arrête les tasks dont le statut est COMPUTING
dans le graphset actuel.
Paramètres :
string
ounumber
: ID de la task à arrêter; mettre*
pour arrêter toutes les tasks.RequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête.
let requestConfig = <RequestType.RequestConfig>{
useMaster: true,
graphSetName: "miniCircle",
};
// Exécute un algorithme en tant que task dans le graphset 'miniCircle'
let algoTest = await conn.uql(
"algo(louvain).params({phase1_loop_num: 20, min_modularity_increase: 0.001}).write({file:{filename_community_id: 'communityID'}})",
requestConfig
);
// Arrête la task ci-dessus et affiche le code d'erreur
let taskInfo = algoTest.data?.get(0).asTable();
let taskId = taskInfo.getRows()[0][0];
let stopTask = await conn.stopTask(taskId, requestConfig);
console.log("Task ID: ", taskId);
console.log("Task stopped: ", resp.status.code_desc);
// Récupère la task ci-dessus arrêtée
let resp = await conn.showTask(
taskId,
RequestType.TASK_STATUS.TASK_STOPPED,
requestConfig
);
console.log(
"Algo name: ",
resp.data.map((item) => item.task_info.algo_name)
);
console.log(
"Task result: ",
resp.data.map((item) => item.result)
);
Task ID: 60495
Task stopped: SUCCESS
Algo name: [ 'louvain' ]
Task result: [ { community_count: '11', modularity: '0.533843' } ]
Exemple Complet
import { ConnectionPool, ULTIPA } from "@ultipa-graph/ultipa-node-sdk";
import { GraphExra } from "@ultipa-graph/ultipa-node-sdk/dist/connection/extra/graph.extra";
import { getEdgesPrintInfo } from "@ultipa-graph/ultipa-node-sdk/dist/printers/edge";
import { RequestType } from "@ultipa-graph/ultipa-node-sdk/dist/types";
import { ListFormat } from "typescript";
let sdkUsage = async () => {
// Connection configurations
//URI example: hosts="mqj4zouys.us-east-1.cloud.ultipa.com:60010"
let hosts = [
"192.168.1.85:60061",
"192.168.1.86:60061",
"192.168.1.87:60061",
];
let username = "***";
let password = "***";
let connPool = new ConnectionPool(hosts, username, password);
// Etablit la connexion à la base de données
let conn = await connPool.getActive();
let isSuccess = await conn.test();
console.log(isSuccess);
// Configurations de la requête
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "miniCircle",
useMaster: true,
};
// Exécute un algorithme en tant que task dans le graphset 'miniCircle'
let algoTest = await conn.uql(
"algo(louvain).params({phase1_loop_num: 20, min_modularity_increase: 0.001}).write({file:{filename_community_id: 'communityID'}})",
requestConfig
);
// Récupère la task ci-dessus
let taskInfo = algoTest.data?.get(0).asTable();
let taskId = taskInfo.getRows()[0][0];
let resp = await conn.showTask(
taskId,
RequestType.TASK_STATUS.TASK_DONE,
requestConfig
);
console.log(
"Algo name: ",
resp.data.map((item) => item.task_info.algo_name)
);
console.log(
"Task result: ",
resp.data.map((item) => item.result)
);
};
sdkUsage().then(console.log).catch(console.log);