{
    "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": null,
              "fraction": 0
              }
            ]
          },
        {
          "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": null,
            "fraction": 0
            }
          ]
        },
        {
          "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": null,
            "fraction": 0
            }
          ]
        },
        {
          "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": null,
            "fraction": 0
            }
          ]
        }
      ],
      "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": [],
              "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": [],
              "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": [],
            "fraction": 0
            }
          ]
        }
      ]
    }
  }
  