Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integration of server scope 3 impacts in project dashboards #14

Closed
da-ekchajzer opened this issue Dec 3, 2021 · 13 comments
Closed

Integration of server scope 3 impacts in project dashboards #14

da-ekchajzer opened this issue Dec 3, 2021 · 13 comments
Assignees
Labels

Comments

@da-ekchajzer
Copy link
Collaborator

da-ekchajzer commented Dec 3, 2021

Description

TODO

Example

route

Bottom-up methodology : POST 149.202.185.115:5000/v1/server/bottom-up

Input

{
    "model":
    {
        "type": "rack",
        "year": 2020
    },
    "configuration":
    {
        "cpu":
        {
            "units": 2,
            "core_units": 24,
            "family": "Skylake"
        },
        "ram":
        [
            {
                "units": 12,
                "capacity": 32,
                "manufacturer": "Samsung"
            }
        ],
        "disk":
        [
            {
                "units": 1,
                "type": "ssd",
                "capacity": 400,
                "manufacturer": "Samsung"
            }
        ],
        "power_supply":
        {
            "units": 2
        }
    }
}

Output exemple

{
    "gwp": 1853.0,
    "pe": 23857.0,
    "adp": 0.174
}
@da-ekchajzer da-ekchajzer changed the title Integration of server scope 3 impact project dashboards Integration of server scope 3 impacts in project dashboards Dec 3, 2021
@da-ekchajzer
Copy link
Collaborator Author

From @bertrandkeller

J'essaye d'utiliser Eleventy pour constituer mon objet à exploiter.

Je ne sais pas comment stocker au mieux les fichiers "inventaire", je réfléchis pour le moment ça donne
server
└── nom-serveur-1.json
└── nom-serveur-2.json

@da-ekchajzer
Copy link
Collaborator Author

Surement la meilleure manière en effet.
On réfléchit à supporter des CSV en entré, mais ça sera sûrement quand on s'attaquera à une vue système d'information.
Si tu veux un exemple qui fonctionne sur la version qu'on sort cet aprem : #6 (comment)

L'exemple suit le modèle ci-dessus

@da-ekchajzer
Copy link
Collaborator Author

da-ekchajzer commented Dec 10, 2021

From @bertrandkeller

On peut aussi construire un CSV avec des intitulés sous cette forme : configuration:cpu:number

On peut utiliser ce package NPM pour convertir en format structuré :
https://www.npmjs.com/package/treeize

Ce qui impliquerait quand même de travail en priorité sur un fichier unique avec plein de serveurs, plutôt que plein de fichiers éclatés.

Pour le CSV, ça donnerait un truc comme ça :

"model:brand","model:name","model:type","model:year","configuration:cpu:number","configuration:cpu:core_number","configuration:cpu:die","configuration:cpu:manufacturer","configuration:cpu:model","configuration:cpu:cpu_family","configuration:ram:capacity","configuration:ram:quantity","configuration:ram:die","configuration:ram:manufacturer","configuration:ram:model","configuration:ram:cpu_family","configuration:ssd:capacity","configuration:ssd:quantity","configuration:ssd:die","configuration:ssd:manufacturer","configuration:ssd:model","configuration:hdd:number","configuration:hdd:manufacturer","configuration:hdd:model","configuration:power_supply:weight","configuration:power_supply:quantity"
"Dell","R740","rack",2020,2,24,0.245,"Intel","",,32,12,1.79,"Samsung","","Corsaire",400,1,50.6,"Samsung","",0,"Samsung","",10,1

Ma lib node n'a pas l'air d'aimer les double quote sur les champs. Donc, ça marche mieux sans double quote.
J'arrive à récupérer le JSON associé.

Si fichier json dans un répertoire, j'envoie le contenu de ce json pour la requête ;
Si csv présent dans le répertoire, je converti le csv, et je m'en sers pour la requête.

Mais l'accès au serveur de test a l'air de ne plus marcher.

model:brand,model:name,model:type,model:year,configuration:cpu:number,configuration:cpu:core_number,configuration:cpu:die,configuration:cpu:manufacturer,configuration:cpu:model,configuration:cpu:cpu_family,configuration:ram:capacity,configuration:ram:quantity,configuration:ram:die,configuration:ram:manufacturer,configuration:ram:model,configuration:ram:cpu_family,configuration:ssd:capacity,configuration:ssd:quantity,configuration:ssd:die,configuration:ssd:manufacturer,configuration:ssd:model,configuration:hdd:number,configuration:hdd:manufacturer,configuration:hdd:model,configuration:power_supply:weight,configuration:power_supply:quantity
Dell,R740,rack,2020,2,24,0.245,Intel,,,32,12,1.79,Samsung,,Corsaire,400,1,50.6,Samsung,,0,Samsung,,10,1

@da-ekchajzer
Copy link
Collaborator Author

Hum on a publié ce matin dessus la V0.
Si tu veux voir la doc tu as des exemples de JSON qui fonctionnent bien :
http://149.202.185.115/API/server_route/

@da-ekchajzer
Copy link
Collaborator Author

From @bertrandkeller

Ok,

J'obtiens bien le résultat. Je continuerai la semaine prochaine.

J'ai donc script Node. Qui fonctionne avec eleventy et que je dois paramétrer pour fonctionner avec goHugo.
Il génère un objet pour eleventy ou peut écrire un fichier JSON pour Hugo.

Il faut ajouter une colonne au CSV pour avoir le nom de serveur. Ensuite. suffira de savoir ce que je fais avec ces données.

J'ai les informations en entrée que je peux exploiter ; plus celle de l’API que je peux afficher aussi.
Une petite liste de serveurs avec leur impact (plus le total :: la somme de tous).

C'est quoi exactement : gwp, pe, adp ?

@da-ekchajzer
Copy link
Collaborator Author

Quels sont les principaux indicateurs environnementaux considérés ?
Potentiel d’épuisement des ressources abiotiques : ADP (Abiotic Depletion Potential) évalue l'utilisation de minéraux et de matières premières fossiles. L’expression “ressources abiotiques” désigne des ressources non vivantes telles que le sol, l'eau, l'air et les minéraux.Unité : cet indicateur est exprimé en kg d'équivalents d'antimoine (kgSbeq). L'antimoine (symbole Sb) étant l’élément chimique utilisé comme unité de référence pour quantifier une consommation de matière première dans une analyse de cycle de vie.Certaines études différencient les impacts liés aux ressources minérales (ADPe ou ADPelement) et ceux liés aux ressources fossiles (ADPf ou ADPfossils)
Potentiel de gaz à effet de serre : GWP (Global Warming Potential) évalue l'effet sur le réchauffement de la planèteUnité : cet indicateur est exprimé en kilogramme d'équivalents de dioxyde de carbone (kgCO2eq).
Consommation de ressources énergétiques (renouvelables + non renouvelables) : PE (Primary Energy)Unité : cet indicateur est exprimé mégajoules (MJ)

@bertrandkeller
Copy link
Collaborator

Bon, j'ai fait un script qui vaut ce qui vaut, mais qui devait prendre en compte et des json ou un csv. J'ai eu pas mal de soucis avec le nouveau json qui propose des array pour la ram et le disk.

Donc je passe par le npm csvtojson. Pour parser un csv de ce type :

name,model.manufacturer,model.name,model.type,model.year,configuration.cpu.units,configuration.cpu.core_units,configuration.cpu.die_size_per_core,configuration.ram.0.units,configuration.ram.0.capacity,configuration.ram.0.density,configuration.disk.0.units,configuration.disk.0.type,configuration.disk.0.capacity,configuration.disk.0.density,configuration.power_supply.units,configuration.power_supplyunit_weight
server csv 1,Dell,R740,rack,2020,2,24,0.245,12,32,1.79,1,ssd,400,50.6,2,2.99
server csv 2,Dell,R740,rack,2021,2,24,0.245,12,32,1.79,1,ssd,400,50.6,4,2.99

On peut donc mettre autant de ram et de disk que souhaité en ajoutant des 1, 2, 3… dans les entêtes. C'est pas hyper lisible mais ça permet de bosser avec un feuille de calcul sous excel.

Je peux maintenant essayer de voir ce que je peux afficher avec le résultat de l’API.

Le Script peut écrire les données dans un fichier json. Je dois donc ajouter la gestion d’arguments pour l'utilisation avec goHugo (avec la prise en compte du chemin du fichier source).

@da-ekchajzer
Copy link
Collaborator Author

Super merci pour ces informations.
En effet, le format liste pour les composants posent plusieurs problèmes, mais permettent plus de modularité d'où ce choix.

Les applis utilisant l'API peuvent considérer qu'un serveur n'a qu'un seul type de RAM ou de DISK pour chaque serveur pour plus de facilité.

Nous travaillions sur une option "verbose" pour renvoyer les données prisent en hypothèse quand une donnée est manquante et qui affiche l'impact de chacun des composants => #8

@bertrandkeller
Copy link
Collaborator

Hello,

On arrive à la fin du mois. J'arrive à un truc plus sympa. C'est à dire :

Je prends un répertoire servers (par exemple) :
└── 2020-11-10.json
└── 2020-11-11.csv
└── 2021-03-10.csv
└── 2021-07-10.json

Je mets plein de fichiers dedans csv ou json mélangés qui contiennent des listes de serveurs et je construis un grand fichier avec la liste des serveurs par date.
Je sais pas si c'est pertinent, j'ai pas encore réfléchi à l'exploitation.

Mais l'idée est qu'on puisse compiler de la donnée qui puisse venir de plusieurs sources ou formats sans se poser trop de questions. Puis de récupérer ça par date sur le front pour faire de la comparaison dans le temps.

Je pense que j'en aurai plus début janvier. Car si trop de données se mélangent, je suis pas sur qu'on puisse exploiter correctement.

@da-ekchajzer
Copy link
Collaborator Author

On a notre 3ᵉ hackathon le 13 et 14 janvier si tu as l'occasion de nous présenter tes résultats ça pourra intéresser l'équipe !

@bertrandkeller
Copy link
Collaborator

Hello, j'ai pas trop avancé sur le sujet depuis 1 mois.
Mais si besoin je peux faire une démo demain.

@da-ekchajzer
Copy link
Collaborator Author

On a une démo de l'API prévu à 10h30 si tu souhaite te joindre à nous.
Je t'envois les infos par mail.

@da-ekchajzer
Copy link
Collaborator Author

Le serveur de dev à dû être changé avec un monté de version intermédiaire avant la publication de la V1 :

Documentation interactive : http://149.202.161.61:5000/docs
Dev API server: http://149.202.161.61:5000

On attend un nom de domaine très bientôt pour éviter ces problèmes.

Le route v1/server/bottom-up existe toujours, mais on conseille d'utiliser la route v1/server/ qui fournit la même fonction (nouveau nom de la route)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants