gisce / fiber-diagram

Component to show and interact with fiber connections
0 stars 0 forks source link

Patch Panel de Fibra Òptica #22

Closed mameijeiras closed 5 months ago

mameijeiras commented 7 months ago

Descripció

Cal afegir un nou model de Patch Panel, que servirà per connectar fibres dintre d'un CTO de manera molt similar al que fa actualment l'Splitter. La particularitat del Patch Panel és que té el mateix nombre d'entrades que de sortides. Aquest nou model ja es troba disponible a l'entorn de Telecos (Telecomunicacions -> Fibra Òptica -> Manteniment -> Inventari de Patch Panels). Un exemple de definició del JSON de connexions és el següent, que és el que es troba al CTO A.

Exemple JSON amb Patch Panels

JSON connexions CTO A ``` { "connections":{ "fibers":[ { "fiber_out":903, "fiber_in":800 }, { "fiber_out":897, "fiber_in":4 }, { "fiber_out":799, "fiber_in":18 } ] }, "elements":{ "splitters":[ { "fibers_in":[ { "number":0, "id":799, "name":"Splitter 1x2 - Port Downstream" } ], "fibers_out":[ { "number":1, "id":800, "name":"Splitter 1x2 - Port Upstream" }, { "number":1, "id":801, "name":"Splitter 1x2 - Port Upstream" } ], "model":[ "giscedata.network.fo.splitter", "Splitter" ] } ], "wires":[ { "tubes":[ { "color":"#FFFFFF", "fibers":[ { "color":"#00FF00", "id":2, "name":"Cable 1 - Tube 1 - Fiber 1" }, { "color":"#FF0000", "id":4, "name":"Cable 1 - Tube 1 - Fiber 2" } ], "id":1, "name":"Cable 1 - Tube 1" } ], "id":1, "disposition":"LEFT", "name":"Cable 1" }, { "tubes":[ { "color":"#FFFFFF", "fibers":[ { "color":"#00FF00", "id":6, "name":"Cable 2 - Tube 1 - Fiber 1" }, { "color":"#FF0000", "id":8, "name":"Cable 2 - Tube 1 - Fiber 2" }, { "color":"#0000FF", "id":10, "name":"Cable 2 - Tube 1 - Fiber 3" }, { "color":"#FFFF00", "id":12, "name":"Cable 2 - Tube 1 - Fiber 4" }, { "color":"#888888", "id":14, "name":"Cable 2 - Tube 1 - Fiber 5" }, { "color":"#8800FF", "id":16, "name":"Cable 2 - Tube 1 - Fiber 6" } ], "id":2, "name":"Cable 2 - Tube 1" }, { "color":"#FFFFFF", "fibers":[ { "color":"#00FF00", "id":18, "name":"Cable 2 - Tube 2 - Fiber 1" }, { "color":"#FF0000", "id":20, "name":"Cable 2 - Tube 2 - Fiber 2" }, { "color":"#0000FF", "id":22, "name":"Cable 2 - Tube 2 - Fiber 3" }, { "color":"#FFFF00", "id":24, "name":"Cable 2 - Tube 2 - Fiber 4" }, { "color":"#888888", "id":26, "name":"Cable 2 - Tube 2 - Fiber 5" }, { "color":"#8800FF", "id":28, "name":"Cable 2 - Tube 2 - Fiber 6" } ], "id":3, "name":"Cable 2 - Tube 2" }, { "color":"#FF0000", "fibers":[ { "color":"#00FF00", "id":30, "name":"Cable 2 - Tube 3 - Fiber 1" }, { "color":"#FF0000", "id":32, "name":"Cable 2 - Tube 3 - Fiber 2" }, { "color":"#0000FF", "id":34, "name":"Cable 2 - Tube 3 - Fiber 3" }, { "color":"#FFFF00", "id":36, "name":"Cable 2 - Tube 3 - Fiber 4" }, { "color":"#888888", "id":38, "name":"Cable 2 - Tube 3 - Fiber 5" }, { "color":"#8800FF", "id":40, "name":"Cable 2 - Tube 3 - Fiber 6" } ], "id":4, "name":"Cable 2 - Tube 3" }, { "color":"#FF0000", "fibers":[ { "color":"#00FF00", "id":42, "name":"Cable 2 - Tube 4 - Fiber 1" }, { "color":"#FF0000", "id":44, "name":"Cable 2 - Tube 4 - Fiber 2" }, { "color":"#0000FF", "id":46, "name":"Cable 2 - Tube 4 - Fiber 3" }, { "color":"#FFFF00", "id":48, "name":"Cable 2 - Tube 4 - Fiber 4" }, { "color":"#888888", "id":50, "name":"Cable 2 - Tube 4 - Fiber 5" }, { "color":"#8800FF", "id":52, "name":"Cable 2 - Tube 4 - Fiber 6" } ], "id":5, "name":"Cable 2 - Tube 4" } ], "id":2, "disposition":"LEFT", "name":"Cable 2" }, { "tubes":[ { "color":"#FFFFFF", "fibers":[ { "color":"#FFFFFF", "id":889, "name":"Cable 3 - Tube 1 - Fiber 1" }, { "color":"#FFFFFF", "id":891, "name":"Cable 3 - Tube 1 - Fiber 2" }, { "color":"#FF0000", "id":893, "name":"Cable 3 - Tube 1 - Fiber 3" }, { "color":"#FF0000", "id":895, "name":"Cable 3 - Tube 1 - Fiber 4" }, { "color":"#0000FF", "id":897, "name":"Cable 3 - Tube 1 - Fiber 5" }, { "color":"#0000FF", "id":899, "name":"Cable 3 - Tube 1 - Fiber 6" } ], "id":71, "name":"Cable 3 - Tube 1" }, { "color":"#000000", "fibers":[ { "color":"#FFFFFF", "id":901, "name":"Cable 3 - Tube 2 - Fiber 1" }, { "color":"#FFFFFF", "id":903, "name":"Cable 3 - Tube 2 - Fiber 2" }, { "color":"#FF0000", "id":905, "name":"Cable 3 - Tube 2 - Fiber 3" }, { "color":"#FF0000", "id":907, "name":"Cable 3 - Tube 2 - Fiber 4" }, { "color":"#0000FF", "id":909, "name":"Cable 3 - Tube 2 - Fiber 5" }, { "color":"#0000FF", "id":911, "name":"Cable 3 - Tube 2 - Fiber 6" } ], "id":72, "name":"Cable 3 - Tube 2" } ], "id":3, "disposition":"RIGHT", "name":"Cable 3" } ], "patch_panels":[ { "fibers_in":[ { "number":1, "id":913, "name":"Patch Panel 2x3 - CTO A - Port Downstream 1" }, { "number":2, "id":914, "name":"Patch Panel 2x3 - CTO A - Port Downstream 2" }, { "number":3, "id":915, "name":"Patch Panel 2x3 - CTO A - Port Downstream 3" }, { "number":4, "id":916, "name":"Patch Panel 2x3 - CTO A - Port Downstream 4" }, { "number":5, "id":917, "name":"Patch Panel 2x3 - CTO A - Port Downstream 5" }, { "number":6, "id":918, "name":"Patch Panel 2x3 - CTO A - Port Downstream 6" } ], "fibers_out":[ { "number":1, "id":919, "name":"Patch Panel 2x3 - CTO A - Port Upstream 1" }, { "number":2, "id":920, "name":"Patch Panel 2x3 - CTO A - Port Upstream 2" }, { "number":3, "id":921, "name":"Patch Panel 2x3 - CTO A - Port Upstream 3" }, { "number":4, "id":922, "name":"Patch Panel 2x3 - CTO A - Port Upstream 4" }, { "number":5, "id":923, "name":"Patch Panel 2x3 - CTO A - Port Upstream 5" }, { "number":6, "id":924, "name":"Patch Panel 2x3 - CTO A - Port Upstream 6" } ], "model":[ "giscedata.network.fo.patch.panel", "Patch Panel" ] } ] } } ```

Especificacions

PRs relacionades ERP

mguellsegarra commented 6 months ago

@mameijeiras

Veig que el JSON de splitters ha canviat al teu exemple...:

   "elements":{
      "splitters":[
         {
            "fibers_in":[
               {
                  "number":0,
                  "id":799,
                  "name":"Splitter 1x2 - Port Downstream"
               }
            ],

Suposo que has canviat el que fins ara era l'index pel number ? Ho dic perquè això impactarà una mica, ja que hi ha varis canvis a fer si es vol canviar el nom del camp.

mameijeiras commented 6 months ago

@mguellsegarra abans s'enviava el camp index? No em sona... Si ha de fer la mateixa funció, et puc enviar el number com a index i llestos

mguellsegarra commented 6 months ago

@mguellsegarra abans s'enviava el camp index? No em sona... Si ha de fer la mateixa funció, et puc enviar el number com a index i llestos

L'index sempre s'enviava, almenys quan el component de fibra actualitzava el json que es guarda a l'ERP.

Hi ha algun canvi d'aquesta feature que afecti als splitters per això?

mameijeiras commented 6 months ago

No. En principi als splitters els ports d'entrada tenen el number 0 i els de sortida el number 1 si no recordo malament. De totes maneres no crec que afecti massa ja que el JSON sempre arriba ordenat, és només per assegurar el cas dels Patch Panels que es pugui veure quina entrada correspon a cada sortida.

mameijeiras commented 6 months ago

Hola @mguellsegarra, finalment hi ha canvis en la creació de Patch Panels i queda més simplificat. En lloc de fer servir els camps n_rows i n_columns es fa servir el "Nombre de ports simple" (n_ports_simple):

image

Aquest valor representa el total de ports entre entrades i sortides, pel que a la pràctica equival 6 in_count i 6 out_count.

Per últim, els Patch Panels haurien de ser de color negre per distingir-se dels Splitters. Ho afegeixo al missatge principal de la issue.

mguellsegarra commented 6 months ago

Perfecte! Li faig una ullada el més aviat possible. Merci :)

mameijeiras commented 6 months ago

Ja he actualitzat el post. Sobre aquest punt:

Com a novetats, ara cada "device" conté el seu model, ja sigui Splitter o Patch Panel. Els valors possibles a hores d'ara són:
('giscedata.network.fo.splitter', 'Splitter')
('giscedata.network.fo.patch.panel', 'Patch Panel')

Això ho faig bàsicament per simplificar la creació de nous elements i evitar duplicar codi específic dels splitters per als patch panels. La meva idea és fer el backend el més genèric possible per facilitar possibles nous tipus d'elements que s'afegeixin en un futur. No sé com veuries unificar el JSON i en lloc de separar splitters i patch_panels tenir únicament devices i distingir-los pel camp model. Així dintre d'un CTO tenim connexions i elements, i dintre d'aquests elements, cables i dispositius.

Ja em comentes què et sembla. Qualsevol dubte sobre això o sobre la resta em dius. Moltes gràcies!

mguellsegarra commented 5 months ago

@mameijeiras

1- Entenc que al JSON li falta el nivell pare de res, és així, o ha cambiat? 2- Al JSON d'exemple no hi ha camps de id que identifiqui splitters o patch panels, és normal? 2- El camp model necessites que el retorni al JSON de l'editor? A nivell de UI no es fa servir.

mguellsegarra commented 5 months ago

Quins valors possibles pot tenir un patch panel a nivell d'entrades/sortides?

6, 12, 24, 48 ?

mameijeiras commented 5 months ago

@mguellsegarra

  1. Sí, aquesta part l'he omès però hi és com sempre.
  2. No, de cada Splitter o Patch Panel apareixen els ids dels ports, com fins ara, que és la informació rellevant per connectar.
  3. Sí, el camp model és necessari per identificar des de l'ERP si s'està afegint un nou Patch Panel o un Splitter. També la idea és fer-ho el més genèric possible per si en un futur hi ha més tipus de "dispositius".

Pel que fa a la mida dels Patch Panels, des de l'ERP no hi ha cap mena de limitació, ha de ser un nombre enter, però els valors amb què hem vist que treballen els nostres clients són: 12, 24, 36, 48 (nombre total de ports, això a nivell d'entrades/sortides és entre dos).

mguellsegarra commented 5 months ago

@mameijeiras

No, de cada Splitter o Patch Panel apareixen els ids dels ports, com fins ara, que és la informació rellevant per connectar.

Així doncs el JSON d'exemple hauria de tenir els id's oi?

Sí, el camp model és necessari per identificar des de l'ERP si s'està afegint un nou Patch Panel o un Splitter. També la idea és fer-ho el més genèric possible per si en un futur hi ha més tipus de "dispositius".

Per identificar si és un patch panel o un splitter ho pots sapiguer sense aquest camp, ja que estan en dos arrays diferents de elements: splitters i patch_panels. Més que res, perquè a l'hora d'afegir nous splitters o patch panels des de l'editor, hauria d'informar el camp model amb el valor corresponent, i això afegeix complexitat.

mameijeiras commented 5 months ago

@mguellsegarra

Així doncs el JSON d'exemple hauria de tenir els id's oi?

Ja els té:

 "patch_panels":[
         {
            "fibers_in":[
               {
                  "number":1,
                  "id":913,
                  "name":"Patch Panel 2x3 - CTO A - Port Downstream 1"
               },
               {
                  "number":2,
                  "id":914,
                  "name":"Patch Panel 2x3 - CTO A - Port Downstream 2"
               },
(...)

Per identificar si és un patch panel o un splitter ho pots sapiguer sense aquest camp, ja que estan en dos arrays diferents de elements: splitters i patch_panels. Més que res, perquè a l'hora d'afegir nous splitters o patch panels des de l'editor, hauria d'informar el camp model amb el valor corresponent, i això afegeix complexitat.

Si és molt complicat, fes-ho de la manera que sigui més fàcil per tu i ja adapto el backend, cap problema. Però si s'afegeixen més elements diferents potser sí que s'hauria de plantejar unificar/simplificar el JSON.

mguellsegarra commented 5 months ago

Ja els té:

No veig quina id té el patch panel, ni quina id té l'splitter. No parlo dels id's de les fibres.

mameijeiras commented 5 months ago

És que on posa fibers_in són els ports d'entrada, realment no són fibres. Això és com està ara mateix funcionant amb els Splitters.

mguellsegarra commented 5 months ago

No m'explico bé segurament: Quin id té l'splitter del teu JSON d'exemple, i quin id té el patch panel?

mameijeiras commented 5 months ago

és una informació que ara mateix no s'està enviant. Realment no fa falta, perquè només es poden eliminar splitters (o patch panels) si no s'han persistit, l'únic que modifica aquesta vista són les connexions i aquestes s'identifiquen amb l'id del port

mguellsegarra commented 5 months ago

En quin moment ha canviat això? És a dir, a nivell d'editor, des del primer dia que es contemplava que els splitters tinguessin id, de fet, en tots els exemples de l'storybook hi consta l'id.

Sense id, com es veu aquí, no hi ha forma de poder identificar els splitters els uns dels altres, veuràs que surten els dos seleccionats, perquè la id no arriba. Screenshot 2024-03-14 at 12 02 34

mameijeiras commented 5 months ago

@mguellsegarra la veritat que no ho sé, que jo recordi mai hi ha hagut id, però cap problema en enviar-lo. Pensava que com s'enviaven com a objectes diferents dins de l'array ja era suficient per distingir-los els uns dels altres

mguellsegarra commented 5 months ago

@mameijeiras

Bones!

he pujat una nova build a alpha, v3.0.0-alpha.50

Aquesta ja permet tenir patch panels, afegir-ne, eliminar-ne, i fer-hi connexions.

El que tinc apuntat, i crec que hauriem de parlar, és com abordar el tema de canviar l'ordre, ho vam comentar a la reunió, però no sé si heu pogut avançar amb el client, a veure quina seria la forma més còmode per ells.

Feu-hi una ullada, i ho comentem.

mameijeiras commented 5 months ago

Només un dubte @mguellsegarra, perquè això funcioni les dades han d'arribar amb el nou format (https://github.com/gisce/fiber-diagram/issues/26) o com fins ara amb Patch Panels i Splitters per separat?

mguellsegarra commented 5 months ago

Només un dubte @mguellsegarra, perquè això funcioni les dades han d'arribar amb el nou format (#26) o com fins ara amb Patch Panels i Splitters per separat?

Com fins ara

mameijeiras commented 5 months ago

Validat! :rocket: :raised_hands: Només un apunt, faltaria canviar el literal del formulari quan es crea un Patch Panel: image Hauria de posar "Nombre de ports simple" o simplement "Number of ports".

mguellsegarra commented 5 months ago

Genial, he canviat els textos pel número de ports.

Vigent a v3.0.0-alpha.52 :=)

mameijeiras commented 5 months ago

Validat! :rocket: Per part meva ja es podria integrar!

mguellsegarra commented 5 months ago

@mameijeiras genial!

Es pot traspassar a tots els entorns? Ho dic per si hi ha canvis als ERP's que s'hagin d'aplicar pel tema dels patch panels.

mameijeiras commented 5 months ago

@mguellsegarra Es pot passar a tots els entorns, és compatible amb versions anteriors de l'ERP, l'únic que fins que no actualitzem l'ERP a tot arreu no podran treballar amb els Patch Panels, però sí seguir treballant amb Splitters i Cables com fins ara

mguellsegarra commented 5 months ago

@mguellsegarra Es pot passar a tots els entorns, és compatible amb versions anteriors de l'ERP, l'únic que fins que no actualitzem l'ERP a tot arreu no podran treballar amb els Patch Panels, però sí seguir treballant amb Splitters i Cables com fins ara

Ok, ho dic perquè en els entorns on no hi hagi l'ERP preparat pels patch panels, l'editor de fibra tindrà igualment les opcions per afegir un patch panel, però al guardar entenc que l'ERP no ho suportarà.

Si ho veieu bé, ho integro!

mameijeiras commented 5 months ago

@mguellsegarra exacte, és així! Per mi endavant! @ecarreras

ecarreras commented 5 months ago

Endavant!

mguellsegarra commented 5 months ago

Traspassat! Vigent a v2.2.15