# 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>
<br> <br>
</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
```