{
  "service_graph": {
    "id": "service_graph",
    "description": "A simple application composed by a source function, two microservices, and a sink function",
    "functions": [
      {
        "id": "urn:app:source:ingress",
        "description": "Source function",
        "label": "Ingress",
        "type": "source",
        "category": "ingress",
        "requirements": [
          {
            "type": "processing_delay",
            "capacity": {
              "value": 0,
              "unit": "ms"
            }
          }
        ],
        "constraints": {
          "sites": [
            "urn:wws:access:naples:ingress"
          ]
        },
        "placement": [
          {
            "site": "urn:wws:access:naples:ingress",
            "fraction": 1
          }
        ]
      },
      {
        "id": "urn:app:operator:microservice1",
        "description": "Microservice for Image Tracking",
        "label": "Tracker",
        "type": "operator",
        "category": "tracking",
        "requirements": [
          {
            "instances": 1
          },
          {
            "type": "cpu",
            "capacity": {
              "value": 1,
              "unit": "vCPU"
            }
          },
          {
            "type": "memory",
            "capacity": {
              "value": 65,
              "unit": "MB"
            }
          },
          {
            "type": "processing_delay",
            "capacity": {
              "value": 3,
              "unit": "ms"
            }
          }
        ],
        "constraints": {
          "sites": [
            "urn:wws:core:milan:cluster1",
            "urn:wws:edge:naples:cluster1"
          ]
        },
        "placement": [
          {
            "site": "urn:wws:edge:naples:cluster1",
            "fraction": 1
          }
        ]
      },
      {
        "id": "urn:app:operator:microservice2",
        "description": "Microservice for Image Rendering",
        "label": "Render",
        "type": "operator",
        "category": "rendering",
        "requirements": [
          {
            "instances": 1
          },
          {
            "type": "cpu",
            "capacity": {
              "value": 15,
              "unit": "vCPU"
            }
          },
          {
            "type": "memory",
            "capacity": {
              "value": 800,
              "unit": "MB"
            }
          },
          {
            "type": "processing_delay",
            "capacity": {
              "value": 3,
              "unit": "ms"
            }
          }
        ],
        "constraints": {
          "sites": [
            "urn:wws:core:milan:cluster2",
            "urn:wws:edge:naples:cluster2"
          ]
        },
        "placement": [
          {
            "site": "urn:wws:edge:naples:cluster2",
            "fraction": 1
          }
        ]
      },
      {
        "id": "urn:app:sink:egress",
        "description": "Egress point consuming the application responses, e.g. user",
        "label": "Sink",
        "type": "sink",
        "category": "egress",
        "requirements": [
          {
            "instances": 1
          },
          {
            "type": "processing_delay",
            "capacity": {
              "value": 3,
              "unit": "ms"
            }
          }
        ],
        "constraints": {
          "sites": [
            "urn:wws:access:naples:egress"
          ]
        },
        "placement": [
          {
            "site": "urn:wws:access:naples:egress",
            "fraction": 1
          }
        ]
      }
    ],
    "commodities": [
      {
        "origin": "urn:app:source:ingress",
        "target": "urn:app:operator:microservice1",
        "description": "API Response",
        "type": "source",
        "category": "API",
        "requirements": [
          {
            "type": "cumulative_delay",
            "capacity": {
              "value": 500,
              "unit": "ms"
            }
          },
          {
            "type": "transmission_delay",
            "capacity": {
              "value": 0,
              "unit": "ms"
            }
          },
          {
            "type": "bandwidth",
            "capacity": {
              "value": 1,
              "unit": "Mbps"
            }
          }
        ],
        "routing": [
          {
            "path": [
              [
                "urn:wws:access:naples:ingress",
                "urn:wws:access:naples"
              ],
              [
                "urn:wws:access:naples",
                "urn:wws:edge:naples"
              ],
              [
                "urn:wws:edge:naples",
                "urn:wws:edge:naples:cluster1"
              ]
            ],
            "fraction": 0
          }
        ]
      },
      {
        "origin": "urn:app:operator:microservice1",
        "target": "urn:app:operator:microservice2",
        "description": "API Response",
        "type": "processing",
        "category": "API",
        "requirements": [
          {
            "type": "cumulative_delay",
            "capacity": {
              "value": 500,
              "unit": "ms"
            }
          },
          {
            "type": "transmission_delay",
            "capacity": {
              "value": 2,
              "unit": "ms"
            }
          },
          {
            "type": "bandwidth",
            "capacity": {
              "value": 50,
              "unit": "Mbps"
            }
          }
        ],
        "routing": [
          {
            "path": [
              [
                "urn:wws:edge:naples:cluster1",
                "urn:wws:edge:naples"
              ],
              [
                "urn:wws:edge:naples",
                "urn:wws:edge:naples:cluster2"
              ]
            ],
            "fraction": 0
          }
        ]
      },
      {
        "origin": "urn:app:operator:microservice2",
        "target": "urn:app:sink:egress",
        "description": "API Response",
        "type": "destination",
        "category": "API",
        "requirements": [
          {
            "type": "cumulative_delay",
            "capacity": {
              "value": 100,
              "unit": "ms"
            }
          },
          {
            "type": "transmission_delay",
            "capacity": {
              "value": 0,
              "unit": "ms"
            }
          },
          {
            "type": "bandwidth",
            "capacity": {
              "value": 80,
              "unit": "Mbps"
            }
          }
        ],
        "routing": [
          {
            "path": [
              [
                "urn:wws:edge:naples:cluster2",
                "urn:wws:edge:naples"
              ],
              [
                "urn:wws:edge:naples",
                "urn:wws:access:naples"
              ],
              [
                "urn:wws:access:naples",
                "urn:wws:access:naples:egress"
              ]
            ],
            "fraction": 0
          }
        ]
      }
    ]
  }
}