Skip to content

Commit

Permalink
Feat/pci ai notebooks header notebook (#14128)
Browse files Browse the repository at this point in the history
* feat(ai.notebooks): header tabs and dashboard page
* feat(ai.notebooks): dashboard tab part 2
* feat(ai.notebooks): life cycle in dashboard
* feat(ai.notebooks): fix sonar issue and comments
* feat(ai.notebooks): fix sonar issue
* feat(ai.notebooks): fix sonar issue
* feat(ai.notebooks): fix sonar issue
* feat(ai.notebooks): rework cx
* feat(ai.notebooks): rework cx part 2
* feat(ai.notebooks): fix sonnar issue
* feat(ai.notebooks): refacto label management
* feat(ai.notebooks): fix sonnar issue
* feat(ai.notebooks): fix pr comments
* feat(ai.notebooks): fix sonar issue
* feat(ai.notebooks): fix pr comments
* feat(ai.notebooks): fix pr comments
* feat(ai.notebooks): fix pr comments
ref:DATATR-1636, DATATR-1638
* Feat/pci ai notebooks attached data tab (#14246)
* feat(ai.notebooks): attached-data tabs
* feat(ai.notebooks): fix build
* feat(ai.notebooks): fix sonar issue
* feat(ai.notebooks): rework attached data tab post cx
ref: DATATR-1639
* feat(ai.notebooks): logs tab (#14313)
* feat(ai.notebooks): logs tab
REF:DATATR-1641
* feat(ai.notebooks): fix types issue
* feat(ai.notebooks): refacto datasync mock
* feat(ai.notebooks): backup tabs (#14358)
* feat(ai.notebooks): backup tabs
* feat(ai.notebooks): fix sonar issue
REF:DATATR-1640
* Feat/pci ai notebooks modal tracking (#14553)
* feat(ai.notebooks): modal and tracking
* feat(ai.notebooks): resolve conflit & fix sonar issue
* feat(ai.notebooks): fix pr comments
* feat(ai.notebooks): fix pr comments
REF:DATATR-1744
Signed-off-by: Arthur Bullet <[email protected]>

---------

---------

Signed-off-by: Arthur Bullet <[email protected]>
  • Loading branch information
abullet33 authored Dec 13, 2024
1 parent 802e674 commit d35a9a1
Show file tree
Hide file tree
Showing 250 changed files with 3,902 additions and 956 deletions.
2 changes: 1 addition & 1 deletion packages/manager/apps/pci-ai-notebooks/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
"@ovhcloud/ods-theme-blue-jeans": "^17.1.0",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-alert-dialog": "^1.0.5",
"@radix-ui/react-checkbox": "^1.1.2",
"@radix-ui/react-collapsible": "^1.0.3",
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-dropdown-menu": "^2.0.6",
Expand Down Expand Up @@ -69,7 +70,6 @@
"react-dom": "^18.2.0",
"react-hook-form": "^7.50.1",
"react-i18next": "^14.0.5",
"react-router": "^6.21.3",
"react-router-dom": "^6.3.0",
"sonner": "^1.4.0",
"tailwind-merge": "^2.2.1",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,18 @@
"addSshKeySuccessDescription": "Nouvelle clé SSH créée",
"addSshKeyTitle": "Configurer un nouvelle clé SSH",
"formSshKeyButtonCancel": "Annuler",
"formSshKeyButtonConfirm": "Confirmer"
"formSshKeyButtonConfirm": "Confirmer",
"cliToastCopied": "Le code a été copié",
"numberOfSeconds_zero": "{{count}} secondes",
"numberOfSeconds_one": "{{count}} seconde",
"numberOfSeconds_other": "{{count}} secondes",
"numberOfMinutes_zero": "{{count}} minutes",
"numberOfMinutes_one": "{{count}} minute",
"numberOfMinutes_other": "{{count}} minutes",
"numberOfHours_zero": "{{count}} heures",
"numberOfHours_one": "{{count}} heure",
"numberOfHours_other": "{{count}} heures",
"numberOfDays_zero": "{{count}} jours",
"numberOfDays_one": "{{count}} jour",
"numberOfDays_other": "{{count}} jours"
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
"createNewNotebook": "Créer un notebook",
"tableHeaderName": "Name",
"tableHeaderLocation": "Région",
"tableHeaderEnvironment": "Environnement",
"tableHeaderFramework": "Framework",
"tableHeaderEditor": "Editeur",
"tableHeaderResources": "Ressources",
"tableHeaderPrivacy": "Confidentialité ",
"networkSecureTitle": "Privé",
"networkPublicTitle": "Public",
"tableHeaderDuration": "Durée de fonctionnement",
"tableHeaderDuration": "Durée",
"tableHeaderStatus": "Statut",
"tableActionManage": "Gérer",
"tableActionStart": "Démarrer",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@
"cliCode": "Equivalent CLI",
"errorGetCommandCli": "Une erreur est survenue lors de la génération de code équivalent pour la CLI",
"cliEquivalentModalTitle": "Création d’un notebook équivalent",
"cliEquivalentModalDescription": "Créer le même notebook via la CLI",
"cliEquivalentModalToastMessage": "Le code a été copié"
"cliEquivalentModalDescription": "Commande CLI",
"cliEquivalentModalToastMessage": "Le code a été copié",
"errorCreatingNotebook": "Erreur",
"successCreatingNotebookTitle": "Succès",
"successCreatingNotebookDescription": "Votre notebook a été créé avec succès"
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
{
"dashboardTab": "Dashboard",
"dataTab": "Données attachées",
"backupTab": "Backups",
"logsTab": "Logs",
"publicAccessLabel": "Public",
"privateAccessLabel": "Privé",
"openEditor": "Ouvrir {{editor}}",
"deleteNotebookTitle": "Supprimer le notebook",
"deleteNotebookDescription": "Etes-vous sur de vouloir supprimer le notebook {{name}} ?",
"notebookButtonCancel": "Annuler",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"breadcrumb": "Conteneurs de données",
"attachedDataTitle": "Conteneurs de données",
"attachedDataDescription": "Si nécessaire, vous pouvez attacher des conteneurs Object Storage OVHcloud à votre notebook. Une fois attachés, ceux-ci seront temporairement chargés et mis en cache près de votre instance afin de réduire la latence et d’améliorer les performances. La bonne pratique est d’attacher un conteneur avec vos données entrantes et un autre avec vos données sortantes.",
"attachedDataInfoLink": "En savoir plus sur le stockage de données.",
"synchroniseDataButton": "Synchronisation globale des données",
"tableHeaderAlias": "Alias",
"tableHeaderContainer": "Conteneur de données",
"tableHeaderMountPath": "Répertoire de montage",
"tableHeaderPermission": "Permission",
"tableHeaderCaching": "Cache",
"mountPathCopyToast": "Le répertoire de montage a été copié",
"tableActionSyncData": "Synchroniser manuellement les données",
"tableWithCache": "Actif",
"tableWithoutCache": "Inactif",
"synchDataButtonHelper": "La synchronisation des données est possible seulement lorsque le notebook est en statut \"Echec de synchronisation\" (seulement pour le type push) ou \"En service\"",
"permission_RO": "Lecture Seule",
"permission_RW": "Lecture & Ecriture",
"permission_RWD": "Lecture & Ecriture & Suppression",
"synchDataDropdownMenuLabel": "Actions",
"dataSyncTitle": "Synchronisation manuelle des données",
"formDataSyncFieldTypeLabel": "Type de synchronisation",
"formDataSyncFieldTypeHelper": "Vous pouvez choisir entre une synchronisation de type push, vers votre conteneur de données ou de type pull, dans l'autre sens.",
"dataSyncGlobalAlertDescription": "La synchronisation sere effecutée sur l'ensemble de vos répertoires de montage",
"dataSyncMountPathAlertDescription": "La synchronisation sera effectuée seulement sur le répertoire de montage {{name}}",
"datasyncButtonCancel": "Annuler",
"datasyncButtonConfirm": "Synchroniser",
"dataSyncToastErrorTitle": "Erreur",
"dataSyncToastSuccessTitle": "Succès",
"dataSyncMountPathToastSuccessDescription": "La synchronisation des données sur le répertoire de montage {{name}} a été correctement lancée",
"dataSyncGlobalToastSuccessDescription": "La synchronisation des données sur tous les répertoire de montage a été correctement lancée"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"breadcrumb": "Backups",
"title": "Sauvegardes",
"description": "Vous trouverez ci-dessous la liste de vos sauvegardes. Vous pouvez créer un nouveau notebook à partir du chacune d'entre elles",
"tableHeaderId": "Id",
"tableHeaderCreationDate": "Date de création",
"tableHeaderUpdateDate": "Date de modification",
"backupDropdownMenuLabel": "Action",
"tableActionFork": "Fork",
"forkBackupTitle": "Commander un notebook depuis un backup",
"forkBackupDescription": "Utiliser le backup {{id}} créé le {{date}} pour commander un nouveau notebook?",
"forkButtonCancel": "Annuler",
"forkBackupButtonConfirm": "Commander",
"forkToastErrorTitle": "Une erreur est survenue",
"forkToastSuccessTitle": "Succés",
"forkToastSuccessDescription": "votre notebook a été créé avec succès"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"dashboardTitle": "Dashboard",
"accessLinkTitle": "Accès",
"labelsTitle": "Labels",
"resourcesTitle": "Ressources",
"lifeCycleTitle": "Cycle de vie",
"billingSupportTitle": "Support & Facturation",
"configurationTitle": "Configuration",
"cliTitle": "CLI",
"cliCodeTitle": "Vous pouvez créer le même notebook en utilisant ces lignes de commande dans votre ovhai CLI.",
"powerTitleSection": "Power",
"computeTitleSection": "Compute",
"storageTitleSection": "Stockage",
"gpuMemoryField": "{{ gpu }} x {{ memory }} RAM",
"gcuComputeField": "CPU: {{ cpu }} vCores ",
"memoryField": "RAM: {{ memory }}",
"publicNetworkField": "Réseau public: {{ network }}/s",
"temporaryLocalStorageField": "Stockage local éphémère: {{ storage }} SSD",
"temporaryLocalStorageHelper": "Stockage local performant, mais non sauvegardé",
"workspaceStorage": "Espace de travail {{ storage }} SSD inclus",
"workspaceStorageHelper": "Stockage distant sauvegardé. Au-delà de 30 jours consécutifs de stockage ou/et du dépassement de ce quota de 10 Gio, les tarifs appliqués seront ceux de Public Cloud Object Storage.",
"sliderInfo": "{{ usedStorage }} / {{ totalStorage }}",
"durationTitle": "Durée de fonctionnement",
"timeLineTitle": "Timeline",
"notebookIdLabel": "Id du notebook",
"notebookIdCopyToast": "L'identifiant du notebook a été copié",
"billingLink": "Gérer la facturation",
"supportLink": "Contacter le support",
"deleteNotebookButton": "Supprimer",
"liveCodeEditorTitle": "Live code editor",
"openEditor": "Ouvrir {{editor}}",
"grafanaTitle": "Suivi de la consommation",
"grafanaButton": "Dashboard grafana",
"addLabelTitle": "Ajouter un label",
"keyFieldLabel": "Clé",
"valueFieldLabel": "Valeur",
"addLabelButtonCancel": "Annuler",
"addLabelNameSubmit": "Ajouter",
"notebookToastErrorTitle": "Erreur",
"notebookToastSuccessTitle": "Succés",
"deleteNotebookSuccess": "Le label a été correctement ajouté à votre notebook"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"breadcrumb": "Logs",
"title": "Logs",
"description": "Pour vous aider à suivre et à piloter votre notebook, vous trouverez les derniers événements (logs) ci-dessous, quasiment en direct.",
"autoRefreshInputLabel": "Auto-Refresh"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import * as ai from '@/types/cloud/project/ai';

export const mockedDataSyncSpec: ai.volume.DataSyncSpec = {
direction: ai.volume.DataSyncEnum.pull,
manual: true,
volume: '1934e1d3-2ba0-4000-8fd3-6f11081e4401',
};

export const mockedDataSync: ai.volume.DataSync = {
createdAt: 'createdAt',
id: 'idDuDataSync',
spec: {
direction: ai.volume.DataSyncEnum.pull,
manual: true,
volume: '1934e1d3-2ba0-4000-8fd3-6f11081e4401',
},
status: {
endedAt: 'endedAT',
info: {
code: ai.InfoCodeEnum.APP_ERROR,
message: 'error_message',
},
progress: [
{
completed: 1,
createdAt: 'createdAt',
deleted: 1,
direction: ai.volume.DataSyncEnum.pull,
failed: 3,
id: 'id',
info: 'info',
processed: 1,
skipped: 1,
state: ai.volume.DataSyncProgressStateEnum.DONE,
total: 1,
transferredBytes: 1,
updatedAt: 'updatedAt',
},
],
queuedAt: 'queudAt',
startedAt: 'startedAt',
state: ai.volume.DataSyncStateEnum.DONE,
},
updatedAt: 'updatedAt',
};
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as ai from '@/types/cloud/project/ai';
import { mockedDataSync } from './datasync';

export const mockedJobSpec: ai.job.JobSpec = {
image: 'image',
Expand All @@ -15,38 +16,7 @@ export const mockedJobSpec: ai.job.JobSpec = {
},
};
export const mockedJobStatus: ai.job.JobStatus = {
dataSync: [
{
createdAt: 'createdAt',
id: 'datasyncId',
status: {
info: {
code: ai.InfoCodeEnum.APP_RUNNING,
message: 'message',
},
progress: [
{
completed: 1,
createdAt: 'createdAt',
deleted: 0,
direction: ai.volume.DataSyncEnum.push,
failed: 0,
id: 'progressId',
info: 'info',
processed: 3,
skipped: 1,
state: ai.volume.DataSyncProgressStateEnum.DONE,
total: 2,
transferredBytes: 30,
updatedAt: 'updatedAt',
},
],
queuedAt: 'queuedAt',
state: ai.volume.DataSyncStateEnum.DONE,
},
updatedAt: 'updatedAt',
},
],
dataSync: [mockedDataSync],
history: [
{
date: 'date',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import * as ai from '@/types/cloud/project/ai';

export const mockedLabel: ai.Label = {
name: 'labelName',
value: 'labelValue',
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import * as ai from '@/types/cloud/project/ai';

export const mockedLogs: ai.Logs = {
lastActivity: 'now',
logs: [
{
content: 'my first line log',
timestamp: '2024-11-27T15:15:35.684Z',
},
{
content: 'my second line log',
timestamp: '2024-11-27T15:15:36.684Z',
},
{
content: 'my third line log',
timestamp: '2024-11-27T15:15:37.684Z',
},
{
content: 'another line log',
timestamp: '2024-11-27T15:15:38.684Z',
},
],
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import * as ai from '@/types/cloud/project/ai';
import { mockedJobStatus } from './job';
import { mockedDataSync } from './datasync';

export const mockedNotebookSpec: ai.notebook.NotebookSpec = {
env: {
Expand Down Expand Up @@ -27,38 +28,7 @@ export const mockedNotebookSpec: ai.notebook.NotebookSpec = {
};

export const mockedNotebookStatus: ai.notebook.NotebookStatus = {
dataSync: [
{
createdAt: 'createdAt',
id: 'datasyncId',
status: {
info: {
code: ai.InfoCodeEnum.APP_RUNNING,
message: 'message',
},
progress: [
{
completed: 1,
createdAt: 'createdAt',
deleted: 0,
direction: ai.volume.DataSyncEnum.push,
failed: 0,
id: 'progressId',
info: 'info',
processed: 3,
skipped: 1,
state: ai.volume.DataSyncProgressStateEnum.DONE,
total: 2,
transferredBytes: 30,
updatedAt: 'updatedAt',
},
],
queuedAt: 'queuedAt',
state: ai.volume.DataSyncStateEnum.DONE,
},
updatedAt: 'updatedAt',
},
],
dataSync: [mockedDataSync],

info: {
code: ai.InfoCodeEnum.JOB_DONE,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import * as ai from '@/types/cloud/project/ai';

export const mockedEditor: ai.notebook.Editor = {
export const mockedEditor: ai.capabilities.notebook.Editor = {
description: 'description',
docUrl: 'docURl',
id: 'editorId',
logoUrl: 'logo',
name: 'EditorName',
version: 'version',
versions: ['version'],
};
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,11 @@ export const mockedSshKey: sshkey.SshKey = {
publicKey: 'publicKey',
regions: ['GRA'],
};

export const mockedSshKeyDetail: sshkey.SshKeyDetail = {
fingerPrint: 'fingerPrint',
id: 'id',
name: 'name',
publicKey: 'publicKey',
regions: ['GRA', 'BHS'],
};
Loading

0 comments on commit d35a9a1

Please sign in to comment.