Search code examples
fiwarefiware-orion

Fiware Context Provider hello world not working


I'm trying to register a Context Provider as source for several KPIs.

So far, it seems registering might be working, as GET http://{{orion}}/v2/registrations returns something similar to what I set in creation:

{
    // each registering a new id is returned: "id": "60991a887032541f4539a71d",
    "description": "City Inhabitants",
    "dataProvided": {
        "entities": [
            {
                "id": "city.inhabitants"
                //,"type": "KeyPerformanceIndicator"
            }
        ]
    },
    "provider": {
        "http": {
            "url": "http://myhost/v2/inhabitants"
        }
        //, "legacyForwarding": false //perhaps there's a bug, cause although unset or set to false, broker still returns true.
    }
}

However GET http://{{orion}}/v2/entities/city.inhabitants results in:

{
    "error": "BadRequest",
    "description": "Service not found. Check your URL as probably it is wrong."
}

GET http://{{orion}}/v2/entities?type=KeyPerformanceIndicator returns [] and context-provider is not being invoked any way.

I'm coding a Node.js application from scratch, to better understand what's going on https://github.com/FIWARE/tutorials.Context-Providers, and using tutorial containers as actual Fiware Broker, so all stores/shelf/products are working but not my KPI.


Solution

  • Using the tutorial application where a microservice is listening on the http://context-provider:3000/random/weatherConditions POST endpoint.

    The following registration:

    curl -L -X POST 'http://localhost:1026/v2/registrations' \
    -H 'Content-Type: application/json' \
    --data-raw '{
       "description": "Get Weather data for KPI 1",
       "dataProvided": {
         "entities": [
           {
             "id" : "urn:ngsi-ld:KPI:010",
             "type": "KeyPerformanceIndicator"
           }
         ],
         "attrs": [
          "temperature", "relativeHumidity"
        ]
       },
       "provider": {
         "http": {
           "url": "http://context-provider:3000/random/weatherConditions"
         },
         "legacyForwarding": false
       },
       "status": "active"
    }'
    

    Will forward and retrieve data for the following request:

    curl -L -X GET 'http://localhost:1026/v2/entities/urn:ngsi-ld:KPI:010'
    

    or

    curl -L -X GET 'http://localhost:1026/v2/entities/?type=KeyPerformanceIndicator'
    

    Returns:

    {
        "id": "urn:ngsi-ld:KPI:010",
        "type": "KeyPerformanceIndicator",
        "temperature": {
            "type": "Number",
            "value": 11,
            "metadata": {}
        },
        "relativeHumidity": {
            "type": "Number",
            "value": 39,
            "metadata": {}
        }
    }
    

    The context broker is forwarding the request to the http://context-provider:3000/random/weatherConditions POST end-point with the following payload:

    {
     "entities": [
      {
       "id": "urn:ngsi-ld:KPI:010",
       "type": "KeyPerformanceIndicator"
      }
     ],
     "attrs": [
      "temperature",
      "relativeHumidity"
     ]
    }