---
# System prepended metadata

title: Harmonic
tags: [harmonic]

---

# Harmonic
* [Component Diagram](#Component-Diagram)
    * [Using FZAG as Backlink to NM](#Variant-1-Using-FZAG-as-Backlink-to-NM)
* [Network Diagrams](#Network-Diagrams)

## Component Diagram

### Variant #1: Using FZAG as Backlink to NM
```plantuml
@startuml
skinparam rectangle {
  BackgroundColor<<FRQ>> Cyan
  FontColor<<FRQ>> Black
  BackgroundColor<<JKU>> Lightgreen
  BackgroundColor<<AIT>> Orange
  BackgroundColor<<Swiss>> Red
  BackgroundColor<<Skyguide>> Plum
  BackgroundColor<<FZAG>> SaddleBrown
  FontColor<<FZAG>> White
}

skinparam component {
  BackgroundColor<<FRQ>> Cyan
  FontColor<<FRQ>> Black
  BackgroundColor<<JKU>> Lightgreen
  BackgroundColor<<FRQ+JKU>> Lightblue
  BackgroundColor<<AIT>> Orange
  BackgroundColor<<Swiss>> Red
  BackgroundColor<<Skyguide>> Plum
  BackgroundColor<<FZAG>> SaddleBrown
  FontColor<<FZAG>> White
}

skinparam database {
  BackgroundColor<<JKU>> Lightgreen
}

rectangle "Airport" as ap #moccasin {
  rectangle "TTMS" <<FRQ>> as ttms {
    component "Controller" <<JKU>> as controller
    database "DB" <<JKU>> as db
    component "Dashboard" <<FRQ+JKU>> as dashboard
    component "Optimizer" <<JKU>> as optimizer
    component "Privacy Engine" <<AIT>> as pe
    component "Equity\nManager" <<JKU>> as equality
    
    controller -down-> optimizer
    optimizer -down-> pe
    
    controller -left-> db
    dashboard -up-> db
    equality -> db
  }
  component "MPC Node" <<AIT>> as mpc1
  pe -down-> mpc1

  component "AP ClientIF" <<FRQ>> as apClientIF
  component "PE Encode" <<AIT>> as apPeEnc
  apClientIF -up-> apPeEnc
  
  component "Airport Bridge" <<FZAG>> as bridge
  component "FZAG System" <<FZAG>> as fzagSys
  
  controller <-up-> apClientIF
  apClientIF -up-> fzagSys
  apClientIF <-left- bridge

}

database "NM\nECTL" as nm {
	component "NM B2B" as casa
}
nm -> bridge
nm <- fzagSys

rectangle "Airspace User (SWISS)" <<SWISS>> as au1 #coral {
  component "AU ClientIF" <<FRQ>> as auClientIF
  component "PE Encode" <<AIT>> as auPeEnc
  auClientIF -down-> auPeEnc

component "SWISS ORCAS" <<SWISS>> as orcas
  auClientIF -right-> orcas

  component "MPC Node" <<AIT>> as mpc2
  pe -down-> mpc2
}
controller -right-> auClientIF

rectangle "Airspace User (other)" as au2 {
  component "AU ClientIF" <<FRQ>> as au2ClientIF
  component "PE Encode" <<AIT>> as au2PeEnc
  au2ClientIF -down-> au2PeEnc
  component "ClientUI" <<FRQ>> as clientUI
  au2ClientIF -right-> clientUI
}
controller -right-> au2ClientIF

rectangle "ANSP (Skyguide)" <<Skyguide>> as ansp #lavender {
  component "ANSP clientIF" <<FRQ>> as anspClientIF
  component "PE Encode" <<AIT>> as anspPeEnc
  anspClientIF -down-> anspPeEnc

  component "Skyguide AOP System" <<Skyguide>> as skyguide
  anspClientIF -right-> skyguide

  component "MPC Node" <<AIT>> as mpc3
  pe -down-> mpc3
}

mpc1 <-> mpc2
mpc1 <-> mpc3

controller -down-> anspClientIF

rectangle "FZAG" <<FZAG>>
rectangle "SWISS" <<SWISS>>
rectangle "Skyguide" <<Skyguide>>
rectangle "FRQ" <<FRQ>>
rectangle "JKU" <<JKU>>
rectangle "AIT" <<AIT>>
@enduml
```

<p>
    &nbsp;<br>&nbsp;<br>&nbsp;
</p>

### ~~Variant #2: Using Skyguide as Backlink to NM~~ (deprecated)
```plantuml
@startuml
skinparam rectangle {
  BackgroundColor<<FRQ>> Cyan
  FontColor<<FRQ>> Black
  BackgroundColor<<JKU>> Lightgreen
  BackgroundColor<<AIT>> Orange
  BackgroundColor<<Swiss>> Red
  BackgroundColor<<Skyguide>> Plum
  BackgroundColor<<FZAG>> SaddleBrown
  FontColor<<FZAG>> White
}

skinparam component {
  BackgroundColor<<FRQ>> Cyan
  FontColor<<FRQ>> Black
  BackgroundColor<<JKU>> Lightgreen
  BackgroundColor<<FRQ+JKU>> Lightblue
  BackgroundColor<<AIT>> Orange
  BackgroundColor<<Swiss>> Red
  BackgroundColor<<Skyguide>> Plum
  BackgroundColor<<FZAG>> SaddleBrown
  FontColor<<FZAG>> White
}

skinparam database {
  BackgroundColor<<JKU>> Lightgreen
}

rectangle "Airport" as ap #moccasin {
  rectangle "TTMS" <<FRQ>> as ttms {
    component "Controller" <<JKU>> as controller
    database "DB" <<JKU>> as db
    component "Dashboard" <<FRQ+JKU>> as dashboard
    component "Optimizer" <<JKU>> as optimizer
    component "Privacy Engine" <<AIT>> as pe
    component "Equity\nManager" <<JKU>> as equality
    
    controller -down-> optimizer
    optimizer -down-> pe
    
    controller -left-> db
    dashboard -up-> db
    equality -> db
  }
  component "MPC Node" <<AIT>> as mpc1
  pe -down-> mpc1

  component "AP ClientIF" <<FRQ>> as apClientIF
  component "PE Encode" <<AIT>> as apPeEnc
  apClientIF -up-> apPeEnc
  
  component "Airport Bridge" <<FZAG>> as bridge
  
  controller <-up-> apClientIF
  apClientIF <-left- bridge

}

database "NM\nECTL" as nm {
	component "NM B2B" as nmb2b
}
nm -down-> bridge

rectangle "Airspace User (SWISS)" <<SWISS>> as au1 #coral {
  component "AU ClientIF" <<FRQ>> as auClientIF
  component "PE Encode" <<AIT>> as auPeEnc
  auClientIF -down-> auPeEnc

component "SWISS ORCAS" <<SWISS>> as orcas
  auClientIF -right-> orcas

  component "MPC Node" <<AIT>> as mpc2
  pe -down-> mpc2
}
controller <-right-> auClientIF

rectangle "Airspace User (other)" as au2 {
  component "AU ClientIF" <<FRQ>> as au2ClientIF
  component "PE Encode" <<AIT>> as au2PeEnc
  au2ClientIF -down-> au2PeEnc
  component "ClientUI" <<FRQ>> as clientUI
  au2ClientIF -right-> clientUI
}
controller <-right-> au2ClientIF

rectangle "ANSP (Skyguide)" <<Skyguide>> as ansp #lavender {
  component "ANSP clientIF" <<FRQ>> as anspClientIF
  component "Skyguide AOP System" <<Skyguide>> as skyguide
  component "PE Encode" <<AIT>> as anspPeEnc
  component "TTA Communication" <<Skyguide>> as ttacom
  anspClientIF -down-> anspPeEnc
  anspClientIF <-down- skyguide
  anspClientIF -right-> ttacom
  ttacom -up-> nmb2b

  component "MPC Node" <<AIT>> as mpc3
  pe -down-> mpc3
}

mpc1 <--> mpc2
mpc1 <--> mpc3
mpc2 <-> mpc3

controller <-down-> anspClientIF

rectangle "FZAG" <<FZAG>>
rectangle "SWISS" <<SWISS>>
rectangle "Skyguide" <<Skyguide>>
rectangle "FRQ" <<FRQ>>
rectangle "JKU" <<JKU>>
rectangle "AIT" <<AIT>>
@enduml
```

### Variant #3: TTMS Cloud Deployment

```plantuml
@startuml
skinparam rectangle {
  BackgroundColor<<FRQ>> Cyan
  FontColor<<FRQ>> Black
  BackgroundColor<<JKU>> Lightgreen
  BackgroundColor<<AIT>> Orange
  BackgroundColor<<Swiss>> Red
  BackgroundColor<<Skyguide>> Plum
  BackgroundColor<<FZAG>> SaddleBrown
  FontColor<<FZAG>> Black
}

skinparam component {
  BackgroundColor<<FRQ>> Cyan
  FontColor<<FRQ>> Black
  BackgroundColor<<JKU>> Lightgreen
  BackgroundColor<<FRQ+JKU>> Lightblue
  BackgroundColor<<AIT>> Orange
  BackgroundColor<<Swiss>> Red
  BackgroundColor<<Skyguide>> Plum
  BackgroundColor<<FZAG>> SaddleBrown
  FontColor<<FZAG>> White
}

skinparam database {
  BackgroundColor<<JKU>> Lightgreen
}

database "NM\nECTL" as nm {
	component "NM B2B" as casa
}

cloud "Cloud Hosted" <<???>> as ttmsCloud {
  rectangle "TTMS" <<FRQ>> as ttms {
    component "Controller" <<JKU>> as controller
    database "DB" <<JKU>> as db
    component "Dashboard" <<FRQ+JKU>> as dashboard
    component "Optimizer" <<JKU>> as optimizer
    component "Privacy Engine" <<AIT>> as pe
    component "Equity\nManager" <<JKU>> as equality
    
    controller -down-> optimizer
    optimizer -down-> pe
    
    controller -down-> db
    dashboard -up-> db
    equality -> db
  }

  package "Other AU Users" {
    component "AU ClientIF" <<FRQ>> as oauClientIF {
      component "PE Encode" <<AIT>> as oauPeEnc
    }
    component "AU ClientUI" <<FRQ>> as oauClientUI
    oauClientIF -> oauClientUI
    oauClientIF -down-> controller
  }
}

cloud "MPC Hosting" <<???>> as mpcHost {
  rectangle "Airport" <<FZAG>> as apMpc #moccasin {
    component "MPC Node" <<AIT>> as mpc1
  }
  rectangle "Airspace User" <<SWISS>> as auMpc #coral {
    component "MPC Node" <<AIT>> as mpc2
  }
  rectangle "ANSP" <<Skyguide>> as anspMpc #lavender {
    component "MPC Node" <<AIT>> as mpc3
  }
  mpc1 <-> mpc2
  mpc2 <-> mpc3
  mpc3 <-down-> mpc1
  
  pe <--down-> mpcHost
}

rectangle "Hosting ???" <<???>> as nmInputHost {
  rectangle "NM Input IF" <<FRQ>> as nmInput
  rectangle "NM ATM System" <<???>> as nmAtmInput
  nmInput -up-> controller  
  nmAtmInput -> nmInput
}

rectangle "Hosting ???" <<???>> as nmOutputHost {
  rectangle "NM Output IF" <<FRQ>> as nmOutput
  rectangle "NM ATM System" <<???>> as nmAtmOutput
  nmOutput <-- controller
  nmAtmOutput <- nmOutput
}

nm -down-> nmAtmInput
nm <-down- nmAtmOutput

rectangle "Airport" <<FZAG>> as ap #moccasin {
  component "AP ClientIF" <<FRQ>> as apClientIF
  component "ZRH Bridge" <<FZAG>> as bridge
  component "AP ClientUI" <<FRQ>> as apClientUI
  apClientIF <-down-> bridge
  apClientIF <-down-> apClientUI 
  controller <-> apClientIF
}

rectangle "Airspace User (SWISS)" <<SWISS>> as au1 #coral {
  component "AU ClientIF" <<FRQ>> as auClientIF {
      component "PE Encode" <<AIT>> as auPeEnc
  }
  component "SWISS ORCAS" <<SWISS>> as orcas
  component "AUClientUI" <<FRQ>> as auClientUI
  auClientIF <-down-> orcas
  auClientIF <-down-> auClientUI 
  controller <-> auClientIF
}

rectangle "ANSP (Skyguide)" <<Skyguide>> as ansp #lavender {
  component "ANSP clientIF" <<FRQ>> as anspClientIF
  component "Skyguide AOP System" <<Skyguide>> as skyguide
  component "ANSP ClientUI" <<FRQ>> as anspClientUI
  anspClientIF <-down-> skyguide
  anspClientIF <-down-> anspClientUI
  controller <-> anspClientIF
}

rectangle "Airspace User (other)" <<other>> as au2 {
  rectangle "Web Browser" as oauBrowser
    oauBrowser -down-> oauClientUI
}

@enduml
```


## Network Diagrams

### FZAG

```plantuml
@startuml
nwdiag {
  Internet [shape=cloud];
  Internet -- fzag_inet_fw;
    
  network DMZ_external {
    address="x.x.x.x/y";
    fzag_inet_fw [description = "<&fire*2> Firewall"];
    controller [address="x.x.x.x"];
    dashboard [address="x.x.x.x"];
    pe [address="x.x.x.x", shape=node, description="<b>Privacy Engine</b>\nharmonic/pe-controller"];
  }

  network DMZ_internal {
    controller [address="x.x.x.10", shape=node, description="<b>Controller</b>\nharmonic/controller"];
    dashboard [address="x.x.x.11", shape=node, description="<b>Dashboard</b>\nharmonic/dashboard"];
    pe [address="x.x.x.12"];
    fzag_mpc [address="x.x.x.13", shape=node, description="<b>MPC Node</b>\nharmonic/mpc_node"];
    fzag_internal_fw [description = "<&fire*2> Firewall"];
  }


  network TTMS {
    address="x.x.x.x/y";
    fzag_internal_fw;
    clientIF [address="x.x.x.20", shape=node, description="<b>AP ClientIF</b>\nharmonic/ap-clientif"];
    db [address="x.x.x.21", shape=database, description="<b>Database</b>\nharmonic/datawarehouse"];
    equality [address="x.x.x.22", shape=node, description="<b>Equality Manager</b>\nharmonic/equity"]
    optimizer [address="x.x.x.23", shape=node, description="<b>Optimizer</b>\nharmonic/optimizer"];
  }

  network FZAG {
    address="x.x.x.x/y";
    clientIF;
    clientUI [address="x.x.x.30", shape=node, description="<b>ClientUI</b>\nharmonic/ap-clientui"];
    peenc [address="x.x.x.31", shape=node, description="<b>PE Encoder</b>\nharmonic/pe-enc"];
    bridge [address="x.x.x.x", shape=collections, description="<b>Airport Bridge</b>\nprovides current flight sequence"];
    system [address="x.x.x.x", shape=collections, description="<b>FZAG System</b>\nNM CASA access"];
  }
    
}
@enduml
```

### SWISS

```plantuml
@startuml
nwdiag {
  Internet [shape=cloud];
  Internet -- inet_fw;
    
  network DMZ_external {
    address="x.x.x.x/y";
    inet_fw [description = "<&fire*2> Firewall"];
    swiss_clientIF [address="x.x.x.x"];
    swiss_mpc [address="x.x.x.x", [shape=node, description="<b>MPC Node</b>\nharmonic/mpc_node"];      
  }

  network DMZ_internal {
    swiss_clientIF [address="x.x.x.x", shape=node, description="<b>AU ClientIF</b>\nharmonic/au-clientif"];
    
    internal_fw [description = "<&fire*2> Firewall"];
  }

  network SWISS {
    address="x.x.x.x/y";
    internal_fw;
    swiss_clientUI [address="x.x.x.x", shape=node, description="<b>ClientUI</b>\nharmonic/au-clientui"];
    swiss_peenc [address="x.x.x.x", shape=node, description="<b>PE Encoder</b>\nharmonic/pe-enc"];
    orcas [address="x.x.x.x", shape=collections, description="<b>SWISS ORCAS</b>"];
  }
}
@enduml
```

### Skyguide

```plantuml
@startuml
nwdiag {
  Internet [shape=cloud];
  Internet -- inet_fw;
    
  network DMZ_external {
    address="x.x.x.x/y";
    inet_fw [description = "<&fire*2> Firewall"];
    skyguide_clientIF [address="x.x.x.x"];
    skyguide_mpc [address="x.x.x.x", [shape=node, description="<b>MPC Node</b>\nharmonic/mpc_node"];      
  }

  network DMZ_internal {
    skyguide_clientIF [address="x.x.x.x", shape=node, description="<b>ANSP ClientIF</b>\nharmonic/ansp-clientif"];
    
    internal_fw [description = "<&fire*2> Firewall"];
  }

  network SWISS {
    address="x.x.x.x/y";
    internal_fw;
    skyguide_clientUI [address="x.x.x.x", shape=node, description="<b>ClientUI</b>\nharmonic/ansp-clientui"];
    skyguide_peenc [address="x.x.x.x", shape=node, description="<b>PE Encoder</b>\nharmonic/pe-enc"];
    system [address="x.x.x.x", shape=collections, description="<b>Skyguide System</b>"];
  }
}
@enduml
```

### EUROCONTROL

```plantuml
@startuml
nwdiag {
  Internet [shape=cloud];
  Internet -- inet_fw;
    
  network EUROCONTROL {
    address="x.x.x.x/y";
    inet_fw [description = "<&fire*2> Firewall"];
    casa [address="x.x.x.x", shape=collections, description="<b>CASA</b>"];
  }
}
@enduml
```