cleanup while remebering how it works, as I will need to make changes

- added type hinting (to help understanding the code)
- fixed dirty dynamic call to `parse()` method by adding missing abstract base class `IHtmlConfiguratorParser`
- organized data files into catalogs directory to unclutter the root
This commit is contained in:
Guillaume Raffy 2025-03-14 19:58:41 +01:00
parent 9b085fe72d
commit e1df4f6501
34 changed files with 108046 additions and 102 deletions

17
.gitignore vendored Normal file
View File

@ -0,0 +1,17 @@
concho/__pycache__
concho.egg-info
concho.venv
build/
__pycache__/
catalogs/hpev1/**/*.js
catalogs/hpev1/**/*.css
catalogs/hpev2/**/*.js
catalogs/hpev2/**/*.css
catalogs/hpev2/20250314-cat2-conf16-hpe-dl380-gen11_files/chat_icon.svg
catalogs/hpev2/20250314-cat2-conf16-hpe-dl380-gen11_files/configure.html
catalogs/hpev2/20250314-cat2-conf16-hpe-dl380-gen11_files/notice
catalogs/hpev2/20250314-cat2-conf16-hpe-dl380-gen11_files/v1.7-675
catalogs/hpev2/20250314-cat2-conf19-hpe-dl365-gen11_files/chat_icon.svg
catalogs/hpev2/20250314-cat2-conf19-hpe-dl365-gen11_files/configure.html
catalogs/hpev2/20250314-cat2-conf19-hpe-dl365-gen11_files/notice
catalogs/hpev2/20250314-cat2-conf19-hpe-dl365-gen11_files/v1.7-675

View File

@ -0,0 +1,167 @@
| Désignation/Description des matériels | Référence constructeur (le cas échéant) | Numéro de référence | Système | TARIFS en €HT | Qt | |
| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------- | :------------------- | :------ | :-------------- | :-- | :----------- |
| CAT3_Configuration n°1 (Châssis rempli de serveurs identiques) | Poweredge C6420 | 4-3-1-14g000 | C6420 | 5,368 € | 1 | € 5,368.00 |
| Chassis rack 2U (C6400) avec 4 cartes mères format simple hauteur (4xC6420) - châssis disques 3"5 | | | | | - | |
| 2 processeurs Intel Xeon Silver 4210R 2.4GHz, 13.75M Cache,9.60GT/s, 2UPI, Turbo, HT,10C/20T (100W) - DDR4-2400 | | | | | - | |
| Mémoire 48Go DDR-4 à 2667MHz (6x8Go) par serveur | | | | | - | |
| 1 x disque dur 1TB SATA à 7.2 ktpm en 3"5 par serveur | | | | | - | |
| 1 x Réseau Ethernet 1Gbit RJ45 | | | | | - | |
| Alimentation hot plug et redondante 1600W Platinium avec 2 câbles d'alimentation C13-14 de 2m | | | | | - | |
| Pas de lecteur Optique | | | | | - | |
| Sans système d exploitation | | | | | - | |
| ProSupport 5 ans, intervention sur site J+1: support professionnel de niveau 2 comprenant assistance matériel et logiciel, 24H/24, 7j/7 Disponibilité d'un Technical Account Manager (TAM) dédié exclusivement à MATINFO 4 pour la gestion des escalades et du reporting | | | | | - | |
| Ces extensions concernent l'ensemble des configurations | | | | | | € - |
| Cat3 Configuration n°1: PowerEdge C6420 | | | | | | € - |
| Processeurs (passage) | | | | | | € - |
| Passage à 2 Processeurs Intel Xeon Silver 4214R 2.4GHz, 16.5M Cache,9.60GT/s, 2UPI, Turbo, HT,12C/24T (100W) - DDR4-2400 | | 4-3-1-14g600 | C6420 | 1,760 € | | € - |
| Passage à 2 Processeurs Intel Xeon Silver 4215R 3,2GHz, 11M Cache,9.60GT/s, 2UPI, Turbo, HT,8C/16T (130W) - DDR4-2400 | | 4-3-1-14g601 | C6420 | 2,568 € | | € - |
| Passage à 2 Processeurs Intel Xeon Silver 4216 2.1GHz, 22M Cache,9.60GT/s, 2UPI, Turbo, HT,16C/32T (100W) - DDR4-2400 | | 4-3-1-14g503 | C6420 | 4,152 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 5215 2.5GHz, 13.75M Cache,10.40GT/s, 2UPI, Turbo, HT,10C/20T (85W) - DDR4-2400 | | 4-3-1-14g504 | C6420 | 6,624 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 5217 3GHz, 11M Cache,10.40GT/s, 2UPI, Turbo, HT,8C/16T (115W) - DDR4-2666 | | 4-3-1-14g505 | C6420 | 9,288 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 5218R 2.1GHz, 27,5M Cache,10.40GT/s, 2UPI, Turbo, HT,20C/40T (125W) - DDR4-2666 | | 4-3-1-14g602 | C6420 | 6,488 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 5220R 2.2GHz, 35.75M Cache,10.40GT/s, 2UPI, Turbo, HT,24C/48T (150W) - DDR4-2666 | | 4-3-1-14g603 | C6420 | 8,488 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 5222 3.8GHz, 16.5M Cache,10.40GT/s, 2UPI, Turbo, HT,4C/8T (105W) - DDR4-2933 | | 4-3-1-14g508 | C6420 | 6,224 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6226R 2,9GHz, 22M Cache,10.40GT/s,Turbo, HT,16C/32T (150W) - DDR4-2933 | | 4-3-1-14g604 | C6420 | 8,488 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6230R 2.1GHz, 35,75M Cache,10.40GT/s, Turbo, HT,26C/52T (150W) - DDR4-2933 | | 4-3-1-14g605 | C6420 | 13,408 € | 1 | € 13,408.00 |
| Passage à 2 Processeurs Intel Xeon Gold 6234 3.3GHz, 24.75M Cache,10.40GT/s, 3UPI, Turbo, HT,8C/16T (130W) - DDR4-2933 | | 4-3-1-14g701 | C6420 | 16,008 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6238R 2.2GHz, 38.5M Cache,10.40GT/s,Turbo, HT,28C/56T (165W) - DDR4-2933 | | 4-3-1-14g606 | C6420 | 19,688 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6238M 2.1GHz, 30.25M Cache,10.40GT/s, 3UPI, Turbo, HT,22C/44T (140W) - DDR4-2933 | | 4-3-1-14g703 | C6420 | 38,488 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6240R 2.4GHz, 35.75M Cache,10.40GT/s, 2UPI, Turbo, HT,24C/48T (165W) - DDR4-2933 | | 4-3-1-14g607 | C6420 | 17,560 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6240M 2.6GHz, 24.75M Cache,10.40GT/s, 2UPI, Turbo, HT,18C/36T (150W) - DDR4-2933 | | 4-3-1-14g704 | C6420 | 35,928 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6242R 3,1GHz, 35,75M Cache,10.40GT/s, 2UPI, Turbo, HT,20C/40T (205W) - DDR4-2933 | | 4-3-1-14g608 | C6420 | 18,888 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6244 3.6GHz, 24.75M Cache,10.40GT/s, 3UPI, Turbo, HT,8C/16T (150W) - DDR4-2933 | | 4-3-1-14g512 | C6420 | 23,208 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6246R 3.4GHz, 35.75M Cache,10.40GT/s, 2UPI, Turbo, HT,16C/32T (205W) - DDR4-2933 | | 4-3-1-14g609 | C6420 | 24,688 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6248R 3GHz, 35.75M Cache,10.40GT/s, 2UPI, Turbo, HT,24C/48T (205W) - DDR4-2933 | | 4-3-1-14g610 | C6420 | 23,624 € | | € - |
| Passage à 2 Processeurs Intel Xeon Platinium 8253 2.2GHz, 22M Cache,10.40GT/s, 3UPI, Turbo, HT,16C/32T (125W) - DDR4-2933 | | 4-3-1-14g514 | C6420 | 22,984 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6254 3.1GHz, 24.75M Cache,10.40GT/s, 3UPI, Turbo, HT,18C/36T (200W) - DDR4-2933 | | 4-3-1-14g515 | C6420 | 27,848 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6252 2.1GHz, 35.75M Cache,10.40GT/s, 3UPI, Turbo, HT,24C/48T (150W) - DDR4-2933 | | 4-3-1-14g516 | C6420 | 28,568 € | | € - |
| Passage à 2 Processeurs Intel Xeon Gold 6258R 2,7GHz, 38.5M Cache,10.40GT/s, 2UPI, Turbo, HT,28C/56T (205W) - DDR4-2933 | | 4-3-1-14g611 | C6420 | 31,288 € | | € - |
| Passage à 2 Processeurs Intel Xeon Platinium 8260 2.4GHz, 35.75M Cache,10.40GT/s, 3UPI, Turbo, HT,24C/48T (165W) - DDR4-2933 | | 4-3-1-14g517 | C6420 | 34,000 € | | € - |
| Passage à 2 Processeurs Intel Xeon Platinium 8268 2.9GHz, 35.75M Cache,10.40GT/s, 3UPI, Turbo, HT,24C/48T (205W) - DDR4-2933 | | 4-3-1-14g518 | C6420 | 44,128 € | | € - |
| Passage à 2 Processeurs Intel Xeon Platinium 8270 2.7GHz, 35.75M Cache,10.40GT/s, 3UPI, Turbo, HT,26C/52T (205W) - DDR4-2933 | | 4-3-1-14g519 | C6420 | 56,184 € | | € - |
| Passage à 2 Processeurs Intel Xeon Platinium 8276 2.2GHz, 38.5M Cache,10.40GT/s, 3UPI, Turbo, HT,28C/56T (165W) - DDR4-2933 | | 4-3-1-14g520 | C6420 | 67,912 € | | € - |
| | | | | | | € - |
| Extensions mémoires | | | | | | € - |
| Passage à 192Go en 6 x 32Go 2933Mhz RDIMM pour les 4 serveurs (A partir de la base 6x8Go) | | 4-3-1-14g041 | C6420 | 5,760 € | | € - |
| Passage à 96Go en 6 x 16Go 2933Mhz RDIMM pour les 4 serveurs (A partir de la base 6x8Go) | | 4-3-1-14g042 | C6420 | 1,920 € | 1 | € 1,920.00 |
| | | | | | | € - |
| Ajout d'une barette de 8Go 2667 Mhz DDR-4 - Pour les 4 serveurs | | 4-3-1-14g043 | C6420 | 320 € | | € - |
| Ajout d'une barette de 16Go 2933 Mhz DDR-4 - Pour les 4 serveurs | | 4-3-1-14g044 | C6420 | 640 € | 6 | € 3,840.00 |
| Ajout d'une barette de 32Go 2933 Mhz DDR-4 - Pour les 4 serveurs | | 4-3-1-14g045 | C6420 | 1,280 € | | € - |
| | | | | | | € - |
| Carte SD et disques M.2 (BOSS) | | | | | | € - |
| Ajout d'un contrôleur BOSS et 1 carte M.2 de 120Go - Pour les 4 serveurs | | 4-3-1-14g046 | C6420 | 739 € | | € - |
| Ajout de 2 cartes SD (MicroSDHC/SDXC) de 16Go redondantes pour hyperviseur - Pour les 4 serveurs | | 4-3-1-14g047 | C6420 | 200 € | | € - |
| Ajout de 2 cartes SD (MicroSDHC/SDXC) de 32Go redondantes pour hyperviseur - Pour les 4 serveurs | | 4-3-1-14g048 | C6420 | 379 € | | € - |
| Ajout de 2 cartes SD (MicroSDHC/SDXC) de 64Go redondantes pour hyperviseur - Pour les 4 serveurs | | 4-3-1-14g049 | C6420 | 878 € | | € - |
| | | | | | | € - |
| Disques durs (passage) | | | | | | € - |
| Passage à châssis avec 4 cartes mères format disques 2"5 | | 4-3-1-14g050 | C6420 | 370 € | | € - |
| Passage à châssis avec 4 cartes mères format disques 2"5 NVMe | | 4-3-1-14g051 | C6420 | 399 € | | € - |
| Passage au châssis sans disques (Retrait des 4x1To du châssis de base) / Carte BOSS obligatoire | | 4-3-1-14g184 | C6420 | -361 € | | € - |
| | | | | | | € - |
| Disques durs additionnels | | | | | | € - |
| Ajout de disques durs hotplug 3,5" | | | | | | € - |
| Ajout d'un disque dur 1 To SATA 7200 Tpm 3,5'' pour les 4 serveurs | | 4-3-1-14g096 | C6420 | 361 € | | € - |
| Ajout d'un disque dur 1 To Nearline SAS 7200 Tpm 3,5"pour les 4 serveurs | | 4-3-1-14g097 | C6420 | 395 € | | € - |
| Ajout d'un disque dur 2 To Nearline SAS 7200 Tpm 3,5"pour les 4 serveurs | | 4-3-1-14g098 | C6420 | 579 € | | € - |
| Ajout d'un disque dur 4 To Nearline SAS 7200 Tpm 3,5"pour les 4 serveurs | | 4-3-1-14g099 | C6420 | 778 € | | € - |
| Ajout d'un disque dur 8 To Nearline SAS 7200 Tpm 3,5"pour les 4 serveurs | | 4-3-1-14g101 | C6420 | 1,120 € | | € - |
| Ajout d'un disque dur 12 To Nearline SAS 7200 Tpm 3,5"- hotplug | | 4-3-1-14g521 | C6420 | 1,680 € | | € - |
| Ajout d'un disque dur 14 To Nearline SAS 7200 Tpm 3,5"- hotplug | | 4-3-1-14g522 | C6420 | 2,120 € | | € - |
| Ajout d'un disque dur 4 To Nearline SAS 7200 Tpm 3,5"- SED FIPS140-2 pour les 4 serveurs | | 4-3-1-14g103 | C6420 | 898 € | | € - |
| Ajout d'un disque dur 8 To Nearline SAS 7200 Tpm 3,5"- SED FIPS140-2 pour les 4 serveurs | | 4-3-1-14g104 | C6420 | 1,280 € | | € - |
| Ajout de disques durs hotplug 2,5" | | | | | | € - |
| Ajout d'un disque dur 1 To Nearline SAS 7200 Tpm 2,5" - Pour les 4 serveurs | | 4-3-1-14g105 | C6420 | 658 € | | € - |
| Ajout d'un disque dur 2 To Nearline SAS 7200 Tpm 2,5" - Pour les 4 serveurs | | 4-3-1-14g106 | C6420 | 1,077 € | | € - |
| Ajout d'un disque dur 300 Go SAS 15k Tpm 2,5" - Pour les 4 serveurs | | 4-3-1-14g108 | C6420 | 599 € | | € - |
| Ajout d'un disque dur 600 Go SAS 10k Tpm 2,5" - Pour les 4 serveurs | | 4-3-1-14g109 | C6420 | 519 € | | € - |
| Ajout d'un disque dur 600 Go SAS 15k Tpm 2,5" - Pour les 4 serveurs | | 4-3-1-14g110 | C6420 | 998 € | | € - |
| Ajout d'un disque dur 900 Go SAS 15k Tpm 2,5" - Pour les 4 serveurs | | 4-3-1-14g111 | C6420 | 1,120 € | | € - |
| Ajout d'un disque dur 1,2 To SAS 10k Tpm 2,5" - Pour les 4 serveurs | | 4-3-1-14g112 | C6420 | 660 € | | € - |
| Ajout d'un disque dur 1,8 To SAS 10k Tpm 2,5" - Pour les 4 serveurs | | 4-3-1-14g113 | C6420 | 960 € | | € - |
| Ajout d'un disque dur 2.4 To SAS 10k Tpm 2,5" - Pour les 4 serveurs | | 4-3-1-14g523 | C6420 | 1,400 € | | € - |
| Ajout d'un disque dur 1,2 To SAS 10k Tpm 2,5" - SED FIPS140-2 - Pour les 4 serveurs | | 4-3-1-14g115 | C6420 | 740 € | | € - |
| Disques SSD SATA Lecture Intensive | | | | | | € - |
| Ajout d'un disque dur 480 Go SSD SATA Read Intensive - 2.5" - 1DWPD - 876TBW - Pour les 4 serveurs | | 4-3-1-14g300 | C6420 | 700 € | | € - |
| Ajout d'un disque dur 960 Go SSD SATA Read Intensive - 2.5" - 1DWPD - 1752TBW - Pour les 4 serveurs | | 4-3-1-14g301 | C6420 | 1,320 € | | € - |
| Ajout d'un disque dur 1.92 To SSD SATA Read Intensive - 2.5" - 1DWPD - 3504TBW - Pour les 4 serveurs | | 4-3-1-14g302 | C6420 | 2,400 € | | € - |
| Ajout d'un disque dur 3.84 To SSD SATA Read Intensive - 2.5" - 1DWPD - 7008TBW - Pour les 4 serveurs | | 4-3-1-14g303 | C6420 | 5,000 € | | € - |
| Disques SSD SATA Utilisation Mixte | | | | | | € - |
| Ajout d'un disque dur 240 Go SSD SATA Mix Use - INTEL S4610 2.5" - 3DWPD - 1314TBW - Pour les 4 serveurs | | 4-3-1-14g196 | C6420 | 680 € | | € - |
| Ajout d'un disque dur 480 Go SSD SATA Mix Use - 2.5" - 3DWPD - 2628TBW - Pour les 4 serveurs | | 4-3-1-14g304 | C6420 | 920 € | | € - |
| Ajout d'un disque dur 960 Go SSD SATA Mix Use - 2.5" - 3DWPD - 5256TBW - Pour les 4 serveurs | | 4-3-1-14g305 | C6420 | 1,720 € | | € - |
| Ajout d'un disque dur 1.92 To SSD SATA Mix Use - 2.5" - 3DWPD - 10512TBW - Pour les 4 serveurs | | 4-3-1-14g306 | C6420 | 3,400 € | | € - |
| Disques SSD SAS Lecture Intensive | | | | | | € - |
| Ajout d'un disque dur 960 Go SSD SAS Read Intensive - 2,5" - 1DWPD - 1752TBW - Pour les 4 serveurs | | 4-3-1-14g307 | C6420 | 2,000 € | | € - |
| Ajout d'un disque dur 1.92 To SSD SAS Read Intensive - 2,5" - 1DWPD - 3504TBW - Pour les 4 serveurs | | 4-3-1-14g308 | C6420 | 3,120 € | | € - |
| Ajout d'un disque dur 3.84 To SSD SAS Read Intensive - 2,5" - 1DWPD - 7008TBW - Pour les 4 serveurs | | 4-3-1-14g309 | C6420 | 6,200 € | | € - |
| Disques SSD SAS Utilisation Mixte | | | | | | € - |
| Ajout d'un disque dur 480 Go SSD SAS Mix Use - TOSHIBA PM5-SV 2,5" - 3DWPD - 2628TBW - Pour les 4 serveurs | | 4-3-1-14g133 | C6420 | 2,075 € | | € - |
| Ajout d'un disque dur 800 Go SSD SAS Mix Use - 2.5'' - 3DWPD - 4360TBW - Pour les 4 serveurs | | 4-3-1-14g310 | C6420 | 1,800 € | | € - |
| Ajout d'un disque dur 1.6 To SSD SAS Mix Use - 2,5" - 3DWPD - 8760TBW - Pour les 4 serveurs | | 4-3-1-14g311 | C6420 | 3,200 € | | € - |
| Ajout d'un disque dur 3.84To SSD SAS Mix Use - 2,5" - 3DWPD - 21024TBW - Pour les 4 serveurs | | 4-3-1-14g136 | C6420 | 9,200 € | | € - |
| Disques SSD SAS Ecriture Intensive | | | | | | € - |
| Ajout d'un disque dur 400 Go SSD SAS Write Intensive - TOSHIBA PM5-M 2,5" - 10DWPD - 7300TBW - Pour les 4 serveurs | | 4-3-1-14g139 | C6420 | 2,800 € | | € - |
| Ajout d'un disque dur 800 Go SSD SAS Write Intensive - TOSHIBA PM5-M 2,5" - 10DWPD - 14600TBW - Pour les 4 serveurs | | 4-3-1-14g140 | C6420 | 4,800 € | | € - |
| Ajout d'un disque dur 1.6 To SSD SAS Write Intensive - TOSHIBA PM5-M 2,5" - 10DWPD - 29200TBW - Pour les 4 serveurs | | 4-3-1-14g141 | C6420 | 7,200 € | | € - |
| | | | | | | € - |
| Disques NVME 2.5'' | | | | | | € - |
| Ajout d'un disque NVME 2.5'' Samsung PM1725 1.6 To Mix Use - Pour les 4 serveurs | | 4-3-1-14g143 | C6420 | 4,400 € | | € - |
| Ajout d'un disque NVME 2.5'' Samsung PM1725 3.2 To Mix Use - Pour les 4 serveurs | | 4-3-1-14g202 | C6420 | 8,800 € | | € - |
| Ajout d'un disque NVME 2.5'' Samsung PM1725 6.4 To Mix Use - Pour les 4 serveurs | | 4-3-1-14g203 | C6420 | 17,600 € | | € - |
| Ajout d'un disque NVME 2.5'' INTEL P4510 1 To Read Intensive - Pour les 4 serveurs | | 4-3-1-14g204 | C6420 | 1,840 € | | € - |
| Ajout d'un disque NVME 2.5'' INTEL P4610 1.6 To Mix Use - Pour les 4 serveurs | | 4-3-1-14g207 | C6420 | 4,400 € | | € - |
| Ajout d'un disque NVME 2.5'' INTEL P4610 3.2 To Mix Use - Pour les 4 serveurs | | 4-3-1-14g208 | C6420 | 8,800 € | | € - |
| | | | | | | € - |
| Cartes interfaces | | | | | | € - |
| Ajout d'une carte RAID H330 SAS/SATA RAID 0,1,5, 10 & 50 pour les 4 serveurs | | 4-3-1-14g145 | C6420 | 410 € | | € - |
| Ajout d'une carte RAID H730p SAS/SATA RAID 0,1,5, 10 & 50 avec 2Go de cache pour les 4 serveurs | | 4-3-1-14g146 | C6420 | 928 € | | € - |
| | | | | | | € - |
| Cartes I/O additionnelles | | | | | | € - |
| Ajout carte réseau Intel I350 deux ports gigabit pour les 4 serveurs | | 4-3-1-14g147 | C6420 | 260 € | | € - |
| Ajout carte réseau Intel X550 deux ports 10 Gb Base-T pour les 4 serveurs | | 4-3-1-14g149 | C6420 | 798 € | | € - |
| Ajout carte réseau Intel XL710 deux ports 40 Gb QSFP+ pour les 4 serveurs | | 4-3-1-14g150 | C6420 | 1,481 € | | € - |
| Ajout carte réseau Intel X710 deux ports 10 Gb SFP+ pour les 4 serveurs | | 4-3-1-14g151 | C6420 | 1,159 € | 1 | € 1,159.00 |
| Ajout carte réseau Intel X710 quatre ports 10 Gb Base-T pour les 4 serveurs | | 4-3-1-14g152 | C6420 | 1,575 € | | € - |
| Ajout carte Mellanox ConnectX-4 Lx Dual Port 25Gb SFP28 pour les 4 serveurs | | 4-3-1-14g155 | C6420 | 1,037 € | | € - |
| Ajout carte SolarFlare 8522 10Gb 2 Ports SFP+ pour les 4 serveurs | | 4-3-1-14g156 | C6420 | 678 € | | € - |
| Ajout carte Broadcom 57412 10G SFP+ Dual Ports pour les 4 serveurs | | 4-3-1-14g157 | C6420 | 718 € | | € - |
| Ajout carte Broadcom 57414 25G SFP28 Dual Ports pour les 4 serveurs | | 4-3-1-14g158 | C6420 | 818 € | | € - |
| Ajout carte Broadcom 57416 10G Base-T Dual Ports pour les 4 serveurs | | 4-3-1-14g159 | C6420 | 758 € | | € - |
| Ajout carte QLogic 41112 Dual Port 10GbE SFP+ pour les 4 serveurs | | 4-3-1-14g160 | C6420 | 718 € | | € - |
| Ajout carte QLogic 41162 Dual Port 10GbE Base-T pour les 4 serveurs | | 4-3-1-14g161 | C6420 | 758 € | | € - |
| Ajout carte QLogic 41262 Dual Port 25GbE SFP28 pour les 4 serveurs | | 4-3-1-14g162 | C6420 | 819 € | | € - |
| Dell Networking Câble Direct Attach Twinaxial SFP+ DELL 3 mètres | | 4-3-1-14g209 | C6420 | 25 € | | € - |
| Dell Networking Câble Direct Attach Twinaxial SFP28 (25G) DELL 3 mètres | | 4-3-1-14g210 | C6420 | 105 € | | € - |
| | | | | | | € - |
| Carte d'administration à distance | | | | | | € - |
| Passage à carte iDRAC 9 Enterprise pour les 4 serveurs | | 4-3-1-14g163 | C6420 | 68 € | 1 | € 68.00 |
| Passage à carte iDRAC 9 Enterprise avec carte SD Vflash 16 GB pour les 4 serveurs | | 4-3-1-14g164 | C6420 | 273 € | | € - |
| Activation d'iDRAC9 Group Manager pour les 4 serveurs | | 4-3-1-14g165 | C6420 | 0 € | | € - |
| Mot de passe iDRAC9 Classique pour les 4 serveurs | | 4-3-1-14g166 | C6420 | 0 € | | € - |
| Mot de passe iDRAC9 Aléatoire pour les 4 serveurs | | 4-3-1-14g167 | C6420 | 0 € | | € - |
| | | | | | | € - |
| Alimentations redondantes | | | | | | € - |
| Passage à double alimentation redondante 2000W (C19/C20) Platinium (1+1) avec 2 câbles d'alimentation C19-C20 de 2.5m | | 4-3-1-14g169 | C6420 | 250 € | | € - |
| Passage à double alimentation redondante 2400W (C19/C20) Platinium (1+1) avec 2 câbles d'alimentation C19-C20 de 2.5m | | 4-3-1-14g170 | C6420 | 350 € | 1 | € 350.00 |
| Passage de câble d'alimentation de 2m à 0,6cm | | 4-2-14g173 | C6420 | 0 € | | € - |
| Passage de câble d'alimentation de 2m à 4m | | 4-2-14g174 | C6420 | 0 € | | € - |
| | | | | | | € - |
| Kit de mise en rack (préciser les modèles de serveurs concernés) | | | | | | € - |
| Kit de mise en rack inclus de base pour le Poweredge C6420 | | 4-3-1-14g171 | C6420 | 0 € | | € - |
| | | | | | | € - |
| Cartes réseau haut-débit pour les applications HPC (préciser les modèles de serveurs concernés) | | | | | | € - |
| Intel® Omni-Path Host Fabric Interface Adapter 100 Series 1 Port PCIe x16 - Pour les 4 serveurs | | 4-3-1-14g172 | C6420 | 1,638 € | | € - |
| ConnectX-4 VPI adapter card, EDR IB (100Gb/s), Double-port SFP28 - Pour les 4 serveurs | | 4-3-1-14g174 | C6420 | 4,988 € | | € - |
| ConnectX-4 VPI adapter card, EDR IB (100Gb/s), single-port SFP28 - Pour les 4 serveurs | | 4-3-1-14g175 | C6420 | 2,853 € | | € - |
| ConnectX-4 adapter card, 100Gbits Dual-ports QSFP+ - Pour les 4 serveurs | | 4-3-1-14g176 | C6420 | 2,853 € | | € - |
| Carte Mellanox ConnectX-5 Simple Port EDR VPI QSFP28 - Pour les 4 serveurs | | 4-3-1-14g-212 | C6420 | 2,814 € | | € - |
| Carte Mellanox ConnectX-6 Simple Port HDR100 100Gbits - Pour les 4 serveurs | | 4-3-1-14g706 | C6420 | 2,816 € | | € - |
| | | | | | | € - |
| Extensions de garanties acquises lors de l'achat initial | | | | | | € - |
| Gardez votre disque dur - KYHD 5 ans - Par châssis | | 4-3-1-14g-213 | C6420 | 280 € | | € - |
| Gardez votre disque dur - KYHD 7 ans - Par châssis | | 4-3-1-14g-214 | C6420 | 380 € | | € - |
| Extension de garantie 5 ans intervention H+4 (24h/24h, 7j/7j) DELL Prosupport pour le châssis et les 4 serveurs | | 4-3-1-14g177 | C6420 | 750 € | | € - |
| Extension de garantie 7 ans intervention J+1 (heures ouvrées, jours ouvrés) DELL Prosupport pour le châssis et les 4 serveurs | | 4-3-1-14g178 | C6420 | 1,100 € | 1 | € 1,100.00 |
| | | | | | | |

View File

Can't render this file because it contains an unexpected character in line 3 and column 98.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,19 +1,38 @@
from typing import Dict, List, Optional
import re
from abc import abstractmethod
import numpy
# from concho import dell
import math
from pathlib import Path
import copy
ItemUid = str # eg 'dell-poweredge-c640'
CpuId = str # eg 'intel-xeon-gold-6140'
CpuArchitecture = str # eg 'icelake'
SimdId = str # eg 'avx2'
MemType = str # eg 'rdimm', 'pmm' (persistent memory module)
TransistorSize = int # transistor size (in nm)
Price = float # price in euros excluding vat
ComponentId = str # eg 'processor', 'ram', 'processor-change'
MemSize = float # memory size in bytes
MemSizeGb = int # memory size in Gibibytes
Power = float # power in watts
class Item():
uid: ItemUid
def __init__(self, uid):
self.uid = uid
class Chassis(Item):
max_num_servers: int
num_cpu_slots_per_server: int
num_dimm_slots_per_channel: int
def __init__(self, uid):
def __init__(self, uid: ItemUid):
super().__init__(uid)
self.max_num_servers = 1
self.num_cpu_slots_per_server = 2
@ -25,6 +44,9 @@ class Chassis(Item):
class Dimm(Item):
num_gb: int
num_mhz: int
mem_type: MemType
def __init__(self, num_gb, num_mhz, mem_type):
uid = "%s-%s-%s" % (mem_type, num_gb, num_mhz)
@ -35,10 +57,15 @@ class Dimm(Item):
class Cpu(Item):
clock: float # in GHz
num_cores: int
max_cpus: int # how many such cpus can be put on the same motherboard
tdp: Power # TDP of the cpu, in Watts
cpumark: float # cpu mark
def __init__(self, proc_id):
def __init__(self, proc_id: CpuId):
super().__init__(proc_id)
cpuTable = numpy.genfromtxt('cpu_table.tsv', dtype=("|U32", float, int, float, float, float), names=True, delimiter='\t')
cpuTable = numpy.genfromtxt('catalogs/cpu_table.tsv', dtype=("|U32", float, int, float, float, float), names=True, delimiter='\t')
for cpu_id, clock, num_cores, max_cpus, tdp, cpumark in zip(cpuTable['id'], cpuTable['clock'], cpuTable['num_cores'], cpuTable['max_cpus'], cpuTable['tdp'], cpuTable['cpumark_1_cpu']):
# print(cpu_id)
if cpu_id == proc_id:
@ -52,7 +79,7 @@ class Cpu(Item):
self.cpumark = cpumark
@property
def architecture(self):
def architecture(self) -> CpuArchitecture:
proc_id = self.uid
if re.match('intel-core-i[357]-8[0-9][0-9][0-9][ktbuh]', proc_id):
return 'coffeelake'
@ -98,7 +125,7 @@ class Cpu(Item):
assert False, 'unhandled processor id : %s' % proc_id
@property
def num_dp_flop_per_cycle(self):
def num_dp_flop_per_cycle(self) -> int:
proc_arch = self.architecture
simd_id = get_simd_id(proc_arch)
num_simd_per_core = 1
@ -144,7 +171,7 @@ class Cpu(Item):
return dp_flops_per_cycle
@property
def num_ram_channels(self):
def num_ram_channels(self) -> int:
return {
'skylake': 6,
'coffeelake': 6,
@ -155,11 +182,11 @@ class Cpu(Item):
}[self.architecture]
def get_proc_architecture(proc_id):
def get_proc_architecture(proc_id: CpuId):
return Cpu(proc_id).architecture
def get_proc_arch_transistor_size(proc_id):
def get_proc_arch_transistor_size(proc_id: CpuId) -> TransistorSize:
return {
'woodcrest': 65,
'harpertown': 45,
@ -175,7 +202,7 @@ def get_proc_arch_transistor_size(proc_id):
}[get_proc_architecture(proc_id)]
def simd_id_to_dp_flops_per_cycle(simd_id):
def simd_id_to_dp_flops_per_cycle(simd_id: SimdId) -> int:
"""
:param str simd_id: eg 'avx2'
@ -208,7 +235,7 @@ def simd_id_to_dp_flops_per_cycle(simd_id):
}[simd_id]
def get_simd_id(proc_arch):
def get_simd_id(proc_arch: CpuArchitecture) -> SimdId:
"""
:param str proc_arch: eg 'broadwell'
:return str: eg 'sse4'
@ -236,18 +263,50 @@ def get_simd_id(proc_arch):
class MemChannel():
dimms: List[Dimm]
def __init__(self):
self.dimms = []
class CpuSlotMem():
mem_channels: List[MemChannel]
def __init__(self):
self.mem_channels = []
class Option():
'''an option in a machine configuration
'''
item: Item # the item describing this option
price: Price # the price of this option, excluding vat
def __init__(self, item: Item, price: Price):
self.item = item
self.price = price
class Module():
'''a configurable machine component, for which there are options (eg ram, cpu)
'''
name: ComponentId # eg 'processor', 'ram', 'processor-change'
options: Dict[ItemUid, Option]
def __init__(self, name: ComponentId):
self.name = name
self.options = {}
def add_option(self, option: Option):
self.options[option.item.uid] = option
class Config():
configurator: 'Configurator'
num_servers: int
_num_cpu_per_server: int
cpu: Optional[Cpu]
cpu_slots_mem: List[CpuSlotMem]
def __init__(self, configurator):
self.configurator = configurator
@ -257,11 +316,11 @@ class Config():
self.cpu_slots_mem = []
@property
def chassis(self):
def chassis(self) -> ItemUid:
return self.configurator.chassis.item
@staticmethod
def _find_dimm_combination(num_dimm_slots_per_channel, min_ram_per_channel, available_dimms):
def _find_dimm_combination(num_dimm_slots_per_channel: int, min_ram_per_channel: int, available_dimms: List['Option']) -> List[Dimm]:
available_dimms.append(Option(Dimm(0, 0, 'dummy'), 0.0)) # fake dimm to represent empty slot
slot_options = []
@ -302,7 +361,8 @@ class Config():
slot_dimms.append(dimm)
return slot_dimms
def set_ram(self, ram_per_core=None, ram_per_server=None, ram_per_cpu=None):
def set_ram(self, ram_per_core: Optional[MemSize] = None, ram_per_server: Optional[MemSize] = None, ram_per_cpu: Optional[MemSize] = None):
'''populates this config's memory slots'''
# ramUpgradePrice128Gb = {
# 'c6220':3520.0,
@ -338,7 +398,7 @@ class Config():
mem_channel.dimms[dimm_slot_index] = slot_dimms[dimm_slot_index]
@property
def ram_size(self):
def ram_size(self) -> MemSizeGb:
ram_size = 0
for cpu_slot_mem in self.cpu_slots_mem:
for mem_channel in cpu_slot_mem.mem_channels:
@ -350,7 +410,7 @@ class Config():
return ram_size
@property
def ram_price(self):
def ram_price(self) -> Price:
ram_price = 0.0
for cpu_slot_mem in self.cpu_slots_mem:
for mem_channel in cpu_slot_mem.mem_channels:
@ -361,19 +421,19 @@ class Config():
ram_price += self.num_servers * dimm_price
return ram_price
def get_price(self):
def get_price(self) -> Price:
price = self.configurator.chassis.price
print(self.cpu.uid, self.configurator.chassis.price, self.configurator.get_item_price(self.cpu.uid), self.ram_price)
price += self.num_servers * self.num_cpu_per_server * self.configurator.get_item_price(self.cpu.uid) + self.ram_price
assert price > 0.0
return price
def get_power_consumption(self):
def get_power_consumption(self) -> Power:
server_base_power_consumption = 100.0 # rough estimation in watts
power_consumption = (self.cpu.tdp * self.num_cpu_per_server + server_base_power_consumption) * self.num_servers
return power_consumption
def get_flops(self):
def get_flops(self) -> float:
# print('%d servers * %d cpu %s * %d cores @ %f (%d flops/cycle)' % (self.num_servers, self.num_cpu_per_server, str(self.cpu.uid), self.cpu.num_cores, self.cpu.clock, self.cpu.num_dp_flop_per_cycle))
dynamic_frequency_scaling = 1.0 # https://en.wikichip.org/wiki/intel/frequency_behavior
# https://www.nas.nasa.gov/hecc/support/kb/cascade-lake-processors_579.html
@ -407,78 +467,63 @@ class Config():
cpu_slot_mem.mem_channels.append(mem_channel)
self.cpu_slots_mem.append(cpu_slot_mem)
def set_cpu(self, cpu):
def set_cpu(self, cpu: Cpu):
self.cpu = cpu
# update the dimm slots accordingly
self._init_dimm_slots()
@property
def num_cpu_per_server(self):
def num_cpu_per_server(self) -> int:
return self._num_cpu_per_server
@num_cpu_per_server.setter
def num_cpu_per_server(self, num_cpu_per_server):
def num_cpu_per_server(self, num_cpu_per_server: int):
self._num_cpu_per_server = num_cpu_per_server
# update the dimm slots accordingly
self._init_dimm_slots()
@property
def num_cpus(self):
def num_cpus(self) -> int:
return self.num_cpu_per_server * self.num_servers
class Option():
def __init__(self, item, price):
self.item = item
self.price = price
class Module():
def __init__(self, name):
self.name = name
self.options = {}
def add_option(self, option):
self.options[option.item.uid] = option
class Configurator():
modules: Dict[ComponentId, Module]
def __init__(self, name):
def __init__(self, name: ComponentId):
self.modules = {}
@abstractmethod
def create_config(self):
def create_config(self) -> Config:
'''create a working basic configuration (basic cpu, basic ram), that can be tweaked later on'''
assert False
def add_module(self, module):
def add_module(self, module: Module):
self.modules[module.name] = module
def get_cpu_options(self):
def get_cpu_options(self) -> List[Cpu]:
return [Cpu(option.item.uid) for option in self.modules['processor'].options.values()]
def get_ram_options(self):
def get_ram_options(self) -> List[Option]:
return self.modules['ram'].values()
def get_dimm(self, dimm_capacity):
def get_dimm(self, dimm_capacity: MemSizeGb) -> Dimm:
for dimm_option in self.modules['ram'].options.values():
dimm = dimm_option.item
# print(dimm.num_gb)
if dimm.num_gb == dimm_capacity:
if dimm.num_gb == MemSizeGb:
return dimm
assert False, 'failed to find an option for a dimm of capacity %d gb' % dimm_capacity
def get_dimm_options(self):
def get_dimm_options(self) -> List[Option]:
return list(self.modules['ram'].options.values())
def get_item(self, item_uid):
def get_item(self, item_uid: ItemUid) -> Item:
for module in self.modules.values():
if item_uid in module.options:
return module.options[item_uid].item
def get_item_price(self, item_uid):
def get_item_price(self, item_uid: ItemUid) -> Price:
for module in self.modules.values():
if item_uid in module.options:
return module.options[item_uid].price
@ -490,7 +535,7 @@ class TableBasedConfigurator(Configurator):
self.host_type_id = host_type_id
self.num_cpu_per_server = num_cpu_per_server
self.num_servers = num_servers
self.dell_price_table = numpy.genfromtxt('dell_procoptions_table.dat', dtype=("|U15", "|U15", float), names=True, delimiter='\t')
self.dell_price_table = numpy.genfromtxt(Path('catalogs/dell/dell_procoptions_table.tsv'), dtype=("|U15", "|U15", float), names=True, delimiter='\t')
self.base_config = Config(self)
self.base_config.num_servers = self.num_servers
self.base_config.num_cpu_per_server = self.num_cpu_per_server
@ -519,6 +564,38 @@ class TableBasedConfigurator(Configurator):
return supported_cpus
class IHtmlConfiguratorParser():
def __init__(self):
pass
@abstractmethod
def parse(self, configurator_html_file_path: Path, configurator: Configurator):
'''parses configurator_html_file_path to build configurator'''
pass
class HtmlConfigurator(Configurator):
'''
a configurator using a server configurator web page from matinfo
'''
def __init__(self, configurator_html_file_path: Path, html_parser: IHtmlConfiguratorParser):
super().__init__(self)
self.base_config = None
self.chassis = None
html_parser.parse(configurator_html_file_path, self)
def create_config(self):
# config = copy.deepcopy(self.base_config)
config = Config(self)
config.num_servers = self.base_config.num_servers
config.num_cpu_per_server = self.base_config.num_cpu_per_server
config.set_cpu(self.base_config.cpu)
config.cpu_slots_mem = copy.deepcopy(self.base_config.cpu_slots_mem)
return config
# def create_host_type(host_type_id):
# if host_type_id == 'c6420':
# return dell.DellPowerEdgeC6420(host_type_id)

View File

@ -6,6 +6,7 @@ from concho.config import Option
from concho.config import Config
from concho.config import Chassis
from concho.config import Cpu, Dimm
from concho.config import IHtmlConfiguratorParser
from abc import abstractmethod
# from xml.dom.minidom import parse
@ -382,7 +383,7 @@ class DellPowerEdgeC6420(TableBasedConfigurator):
return 361.0
class DellConfiguratorParser():
class DellConfiguratorParser(IHtmlConfiguratorParser):
def __init__(self):
pass
@ -860,28 +861,6 @@ class DellConfiguratorParser2021(DellConfiguratorParser):
return base_price
class MatinfoConfigurator(Configurator):
'''
a configurator using a server configurator web page from matinfo
'''
def __init__(self, configurator_html_file_path: Path, html_parser):
super().__init__(self)
self.base_config = None
self.chassis = None
html_parser.parse(configurator_html_file_path, self)
def create_config(self):
# config = copy.deepcopy(self.base_config)
config = Config(self)
config.num_servers = self.base_config.num_servers
config.num_cpu_per_server = self.base_config.num_cpu_per_server
config.set_cpu(self.base_config.cpu)
config.cpu_slots_mem = copy.deepcopy(self.base_config.cpu_slots_mem)
return config
class DellMatinfoCsvConfigurator(Configurator):
'''
a configurator using the excel sheet from dell matinfo

View File

@ -1,13 +1,14 @@
from typing import Dict, List
from typing import Dict, List, Any
from pathlib import Path
from concho.config import Module
from concho.config import Option
from concho.config import Config
from concho.config import Chassis
from concho.config import Cpu, Dimm
from concho.config import IHtmlConfiguratorParser
# from xml.dom.minidom import parse
from lxml.html import parse
from lxml.html import parse as parse_html
import re
@ -220,7 +221,7 @@ class HpeCatalogWoutCpuParser(HpeCatalogParser):
return base_config
class HpeConfiguratorParser():
class HpeConfiguratorParser(IHtmlConfiguratorParser):
def __init__(self):
pass
@ -262,8 +263,8 @@ class HpeConfiguratorParser():
assert False
@staticmethod
def _get_db_as_tree(hpe_configurator_html_file_path: Path):
html_root = parse(str(hpe_configurator_html_file_path)).getroot()
def _get_db_as_tree(hpe_configurator_html_file_path: Path) -> Dict[str, Any]:
html_root = parse_html(str(hpe_configurator_html_file_path)).getroot()
import json
script_elements = html_root.xpath(".//script[@type='text/javascript']")
@ -385,7 +386,7 @@ class HpeConfiguratorParser():
# builds a configurator by parsing one of hpe configurator's pages
# as input, it expects a html page saved from a configurator in which the cpu choice only appears when the user sets a quantity of 0 in front of the selected cpu.
# So, to create a html file compatible with this parser:
# 1. on hpe's matingo web page, chose a configuration for which the the cpu choice only appears when the user sets a quantity of 0 in front of the selected cpu (eg cat2-conf10)
# 1. on hpe's matinfo web page, choose a configuration for which the the cpu choice only appears when the user sets a quantity of 0 in front of the selected cpu (eg cat2-conf10)
# 2. on this page, set the number of cpu to 0. This causes a popup window to appear; this popup window contains all the cpu choices. Only when this popup window is shown save the page as html (because the catalog contained in the embedded javascript contains all the options except for cpu options).
class HpeCpuChoiceConfiguratorParser(HpeConfiguratorParser):
@ -403,7 +404,7 @@ class HpeCpuChoiceConfiguratorParser(HpeConfiguratorParser):
def parse_proc_change_options(self, hpe_configurator_html_file_path: Path):
# find the proc options in the cpu options popup window as these options are not present in the hpe_catalog of this page
html_root = parse(str(hpe_configurator_html_file_path)).getroot()
html_root = parse_html(str(hpe_configurator_html_file_path)).getroot()
proc_options = Module('processor-change')
# module_root_element = self._get_module(html_root, 'Processeurs (Passage)')

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from typing import List
from abc import abstractmethod
import numpy
# import pylab
@ -10,7 +11,7 @@ import hashlib
# from string import ascii_lowercase
# from concho.config import Configurator
# from concho.config import Config
from concho.config import Cpu
from concho.config import Cpu, MemSize, Configurator
# from concho import dell
markerTypes = [',', '+', '.', '^', 'v', '<', '>', 'o', '*', '1', '2', '3', '4', '8', 's', 'p', 'h', 'H', 'x', 'X', 'D', 'd', '|', '_']
@ -109,7 +110,7 @@ class ConfigFlopsPerEuro(ConfigAxisDef):
return u'num total DP operations/total cost [€/^-1]'
def get_value_for_config(self, config):
kWHPrice = 0.30 # from yjuet on 20/01/2023 : 300€/MWh
kWHPrice = 0.08 # from yjuet on 20/01/2023 : 300€/MWh
containerLifetime = 7.0 # in years
powerUsageEfficiency = 0.5
@ -201,7 +202,7 @@ def plot_configs(configs, xaxis_def, yaxis_def, plot_title):
# marker = get_marker_from_label( label )
# print(x1, y1)
short_label = config_label.replace('dell-poweredge-', '').replace('intel-xeon-', '').replace('hpe-proliant-', '').replace('-gen', '-g')
plt.scatter(x1, y1, facecolors=color, s=(markerSize * len(create_unique_marker(config_index))), marker='$\mathrm{%s}$' % create_unique_marker(config_index), label=short_label)
plt.scatter(x1, y1, facecolors=color, s=(markerSize * len(create_unique_marker(config_index))), marker=r'$\mathrm{%s}$' % create_unique_marker(config_index), label=short_label)
if False: # y1 > 5.0e16:
plt.annotate(u'%s' % short_label,
xy=(x1, y1), xytext=(x1 * 4.0, (y1 - 5.2e16) * 7.1),
@ -224,7 +225,7 @@ def plot_configs(configs, xaxis_def, yaxis_def, plot_title):
plt.show()
def plot_configurators(configurators, ram_per_core, xaxis_def, yaxis_def, plot_title, config_filter=lambda config: True):
def plot_configurators(configurators: List[Configurator], ram_per_core: MemSize, xaxis_def, yaxis_def, plot_title, config_filter=lambda config: True):
configs = []
for configurator in configurators:
for cpu in configurator.get_cpu_options():

View File

@ -1,6 +1,6 @@
from pathlib import Path
from concho.dell import DellMatinfoCsvConfigurator
from concho.dell import MatinfoConfigurator
from concho.config import HtmlConfigurator
from concho.dell import DellConfiguratorParser2020
from concho.dell import DellConfiguratorParser2021
from concho.hpe import HpeConfiguratorParser, HpeCpuChoiceConfiguratorParser
@ -11,12 +11,12 @@ from concho.procs_chooser import ConfigFlopsPerEuro
def test_all_matinfo_2020_configs():
# configurator = DellMatinfoConfigurator('rcrc1406676-4834664 - Cat2 Conf4 PowerEdge R640 - Dell.html')
# configurator = DellHtmlConfigurator('rcrc1406676-4834664 - Cat2 Conf4 PowerEdge R640 - Dell.html')
# print(configurator)
configurators = [
DellMatinfoCsvConfigurator(Path('c6420-20200716-price.tsv')),
MatinfoConfigurator(Path('rcrc1406676-4834664 - Cat2 Conf4 PowerEdge R640 - Dell.html'), DellConfiguratorParser2020()),
MatinfoConfigurator(Path('rcrc1406676-4824727 - Cat 2 Conf 7 PowerEdge R940 - Dell.html'), DellConfiguratorParser2020()),
DellMatinfoCsvConfigurator(Path('catalogs/dell/c6420-20200716-price.tsv')),
HtmlConfigurator(Path('catalogs/dell/rcrc1406676-4834664 - Cat2 Conf4 PowerEdge R640 - Dell.html'), DellConfiguratorParser2020()),
HtmlConfigurator(Path('catalogs/dell/rcrc1406676-4824727 - Cat 2 Conf 7 PowerEdge R940 - Dell.html'), DellConfiguratorParser2020()),
# dell.DellPowerEdgeR940(),
]
@ -24,12 +24,12 @@ def test_all_matinfo_2020_configs():
def test_credits_2020_configs():
# configurator = DellMatinfoConfigurator('rcrc1406676-4834664 - Cat2 Conf4 PowerEdge R640 - Dell.html')
# configurator = DellHtmlConfigurator('rcrc1406676-4834664 - Cat2 Conf4 PowerEdge R640 - Dell.html')
# print(configurator)
configurators = [
DellMatinfoCsvConfigurator(Path('c6420-20200716-price.tsv')),
MatinfoConfigurator(Path('rcrc1406676-4834664 - Cat2 Conf4 PowerEdge R640 - Dell.html'), DellConfiguratorParser2020()),
MatinfoConfigurator(Path('rcrc1406676-4824727 - Cat 2 Conf 7 PowerEdge R940 - Dell.html'), DellConfiguratorParser2020()),
DellMatinfoCsvConfigurator(Path('catalogs/dell/c6420-20200716-price.tsv')),
HtmlConfigurator(Path('catalogs/dell/rcrc1406676-4834664 - Cat2 Conf4 PowerEdge R640 - Dell.html'), DellConfiguratorParser2020()),
HtmlConfigurator(Path('catalogs/dell/rcrc1406676-4824727 - Cat 2 Conf 7 PowerEdge R940 - Dell.html'), DellConfiguratorParser2020()),
# dell.DellPowerEdgeR940(),
]
@ -52,10 +52,10 @@ def test_credits_2020_configs():
def test_credits_2021_configs():
configurators = [
MatinfoConfigurator(Path('20210407 - Cat2 Conf4 PowerEdge R640 - Dell.html'), DellConfiguratorParser2021()),
MatinfoConfigurator(Path('20210407 - Cat2 Conf7 PowerEdge R940 - Dell.html'), DellConfiguratorParser2021()),
MatinfoConfigurator(Path('20210407 - Cat2 Conf8 PowerEdge R7525 - Dell.html'), DellConfiguratorParser2021()),
# MatinfoConfigurator('20210407 - Cat2 Conf10 PowerEdge R6525 - Dell.html', DellConfiguratorParser2021()),
HtmlConfigurator(Path('catalogs/dell/20210407 - Cat2 Conf4 PowerEdge R640 - Dell.html'), DellConfiguratorParser2021()),
HtmlConfigurator(Path('catalogs/dell/20210407 - Cat2 Conf7 PowerEdge R940 - Dell.html'), DellConfiguratorParser2021()),
HtmlConfigurator(Path('catalogs/dell/20210407 - Cat2 Conf8 PowerEdge R7525 - Dell.html'), DellConfiguratorParser2021()),
# HtmlConfigurator('20210407 - Cat2 Conf10 PowerEdge R6525 - Dell.html', DellConfiguratorParser2021()),
]
# config_filter = lambda config : config.cpu.uid in [
# 'intel-xeon-gold-5222',
@ -76,10 +76,10 @@ def test_credits_2021_configs():
def test_ur1_presents_2023_configs():
configurators = [
# MatinfoConfigurator('20210407 - Cat2 Conf4 PowerEdge R640 - Dell.html', DellConfiguratorParser2021()),
MatinfoConfigurator(Path('20230120-cat2-conf3-hpe-dl360-gen10.html'), HpeConfiguratorParser()),
MatinfoConfigurator(Path('20230123-cat2-conf10-hpe-dl360-gen10plus-cpuchoice.html'), HpeCpuChoiceConfiguratorParser()),
MatinfoConfigurator(Path('20230123-cat2-conf11-hpe-dl385-gen10plus-cpuchoice.html'), HpeCpuChoiceConfiguratorParser()),
# HtmlConfigurator('20210407 - Cat2 Conf4 PowerEdge R640 - Dell.html', DellConfiguratorParser2021()),
HtmlConfigurator(Path('catalogs/hpev1/20230120-cat2-conf3-hpe-dl360-gen10.html'), HpeConfiguratorParser()),
HtmlConfigurator(Path('catalogs/hpev1/20230123-cat2-conf10-hpe-dl360-gen10plus-cpuchoice.html'), HpeCpuChoiceConfiguratorParser()),
HtmlConfigurator(Path('catalogs/hpev1/20230123-cat2-conf11-hpe-dl385-gen10plus-cpuchoice.html'), HpeCpuChoiceConfiguratorParser()),
]
def config_filter(config):