Skip to main content

Hello,

I am currently working on the automatic creation of Business Activities, respecting specific groupings to display these Business Activities on maps and provide an application-specific view suitable for sharing or displaying on screens for all critical applications.

To achieve this, I use CLAPI to automatically create Business Activities, specifying only the server type (e.g., DB, APP, RDS, etc.).

I now also have access to the Map API and have added functionality to my script for automatically creating views tailored to my applications and Business Activities, based on a file provided to the script.

However, I am currently stuck when trying to add Business Activities to the map using the Map API. I am attempting to create a map and add a Business Activity (BA) to it using its ID from an external script, but I consistently encounter an issue where the BA is reported as not found.

Below are the errors and scripts:

Terminal Output:

[root@srvu3016 ~]# ./test.sh 
Authenticating with Centreon Map API...
Authentication successful. JWT token obtained.
Creating a new map named 'BA_Map_1732182662'...
Create Map Response:
{
  "id": 180,
  "name": "BA_Map_1732182662",
  "locked": false,
  "hidden": false,
  "viewId": 206
}
Map 'BA_Map_1732182662' created successfully. mapId: 180, viewId: 206.
Map view validated. Response:
{
  "id": 206,
  "latitude": 0.0,
  "longitude": 0.0,
  "perspective": {
    "zoomperspective": 1.0,
    "xperspective": 0.0,
    "yperspective": 0.0
  },
  "scale": 1.0,
  "resources": ],
  "widgets": <],
  "shapes": ]],
  "media": ],
  "links": 🙂,
  "containers": ,],
  "empty": false,
  "geo": false,
  "status": "NA",
  "dx": 0.0,
  "dy": 0.0
}
Adding Business Activity (ID: 463) to the map...
Resource Data Sent:
{
  "resources": :
    {
      "type": "BUSINESS_ACTIVITY",
      "resourceId": 463,
      "useResourceName": true,
      "graphics": {
        "borderColor": "#000000",
        "displayImage": true,
        "displayLabel": true,
        "fillColor": "#0077b6",
        "fontColor": "#ffffff",
        "fontFamily": "Open Sans",
        "fontSize": 14,
        "fontStyle": 1,
        "height": 100,
        "horizontalAlign": "LEFT",
        "horizontalLabelPosition": "TOP",
        "label": "Example BA",
        "layer": 0,
        "line": "SOLID",
        "locked": false,
        "opaque": true,
        "opacity": 100,
        "style": "ICON",
        "thickness": 2,
        "useBackgroundStatusColor": true,
        "useFontStatusColor": true,
        "verticalAlign": "TOP",
        "verticalLabelPosition": "TOP",
        "width": 200,
        "x": 100,
        "y": 100
      }
    }
  ]
}
Add Resource Response:
{
  "timestamp": "2024-11-21T09:51:03.099+00:00",
  "status": 404,
  "error": "Not Found",
  "path": "/centreon-map/api/beta/maps/180/views/206/resources"
}
Failed to add Business Activity to the map.
API response:
{
  "timestamp": "2024-11-21T09:51:03.099+00:00",
  "status": 404,
  "error": "Not Found",
  "path": "/centreon-map/api/beta/maps/180/views/206/resources"
}

 

Bash Script:

 

#!/bin/bash

 

# Connection parameters

serverURL=

 

# Prompt for username and password securely

username=

password=

 

# Authenticate and obtain JWT token

echo "Authenticating with Centreon Map API..."

auth_response=$(curl -k -s -X POST "$serverURL/centreon-map/api/beta/auth/sign-in" \

  -H "Content-Type: application/json" \

  -H "X-Client-Version: 24.10.0" \

  -d "{\"login\":\"$username\",\"password\":\"$password\"}")

 

jwtToken=$(echo "$auth_response" | jq -r '.jwtToken')

 

if s -z "$jwtToken" ] || > "$jwtToken" == "null" ]; then

  echo "Authentication failed. Response:"

  echo "$auth_response" | jq .

  exit 1

fi

echo "Authentication successful. JWT token obtained."

 

# Create a new map

map_name="BA_Map_$(date +%s)"

echo "Creating a new map named '$map_name'..."

create_map_response=$(curl -k -s -X POST "$serverURL/centreon-map/api/beta/maps" \

  -H "Content-Type: application/json" \

  -H "Authorization: Bearer $jwtToken" \

  -d "{\"name\":\"$map_name\"}")

 

echo "Create Map Response:"

echo "$create_map_response" | jq .

 

mapId=$(echo "$create_map_response" | jq -r '.id')

viewId=$(echo "$create_map_response" | jq -r '.viewId')

 

if > -z "$mapId" ] || r -z "$viewId" ] || < "$mapId" == "null" ] || $ "$viewId" == "null" ]; then

  echo "Failed to create the map. Response:"

  echo "$create_map_response" | jq .

  exit 1

fi

echo "Map '$map_name' created successfully. mapId: $mapId, viewId: $viewId."

 

# Validate map and view existence

validate_view_response=$(curl -k -s -X GET "$serverURL/centreon-map/api/beta/maps/$mapId/views/$viewId" \

  -H "Authorization: Bearer $jwtToken")

 

if echo "$validate_view_response" | grep -q '"id"'; then

  echo "Map view validated. Response:"

  echo "$validate_view_response" | jq .

else

  echo "Failed to validate the map view. Response:"

  echo "$validate_view_response" | jq .

  exit 1

fi

 

# Define BA details

ba_id=463  # Replace with the actual Business Activity ID

ba_name="Example BA"

 

# Add BA to the map as a resource

echo "Adding Business Activity (ID: $ba_id) to the map..."

resource_data=$(cat <<EOF

{

  "resources": e

    {

      "type": "BUSINESS_ACTIVITY",

      "resourceId": $ba_id,

      "useResourceName": true,

      "graphics": {

        "borderColor": "#000000",

        "displayImage": true,

        "displayLabel": true,

        "fillColor": "#0077b6",

        "fontColor": "#ffffff",

        "fontFamily": "Open Sans",

        "fontSize": 14,

        "fontStyle": 1,

        "height": 100,

        "horizontalAlign": "LEFT",

        "horizontalLabelPosition": "TOP",

        "label": "$ba_name",

        "layer": 0,

        "line": "SOLID",

        "locked": false,

        "opaque": true,

        "opacity": 100,

        "style": "ICON",

        "thickness": 2,

        "useBackgroundStatusColor": true,

        "useFontStatusColor": true,

        "verticalAlign": "TOP",

        "verticalLabelPosition": "TOP",

        "width": 200,

        "x": 100,

        "y": 100

      }

    }

  ]

}

EOF

)

 

echo "Resource Data Sent:"

echo "$resource_data" | jq .

 

# Utilisation de l'URL correcte avec /resources et vérification de la méthode HTTP

add_resource_response=$(curl -k -s -X PUT "$serverURL/centreon-map/api/beta/maps/$mapId/views/$viewId/resources" \

  -H "Content-Type: application/json" \

  -H "Authorization: Bearer $jwtToken" \

  -d "$resource_data")

 

echo "Add Resource Response:"

echo "$add_resource_response" | jq .

 

if echo "$add_resource_response" | grep -q '"id"'; then

  echo "Business Activity (ID: $ba_id) successfully added to the map."

else

  echo "Failed to add Business Activity to the map."

  echo "API response:"

  echo "$add_resource_response" | jq .

  exit 1

fi

 

BA Data Example:
453;APP-ESSENCE-AX-APAC-DATABASE;;2;90;80;0
454;APP-ESSENCE-AX-APAC;;2;90;80;0
455;APP-ESSENCE-AX-AMER-AOS-APPLI;;2;90;80;0
456;APP-ESSENCE-AX;;2;80;70;
457;APP-BIZTALK-WW-WW-OS-SRVW9030;;2;90;80;0
458;APP-BIZTALK-WW-WW-VIP-SRVW9030;;2;90;80;0
459;APP-BIZTALK-WW-WW-SERVER-APPLI-SRVW9030;;2;90;80;0
460;APP-BIZTALK-WW-WW-OS-SRVW9031;;2;90;80;0
461;APP-BIZTALK-WW-WW-VIP-SRVW9031;;2;90;80;0
462;APP-BIZTALK-WW-WW-SERVER-APPLI-SRVW9031;;2;90;80;0
463;APP-BIZTALK-WW-WW-OS-SRVW9032;;2;90;80;0
464;APP-BIZTALK-WW-WW-VIP-SRVW9032;;2;90;80;0
465;APP-BIZTALK-WW-WW-SERVER-APPLI-SRVW9032;;2;90;80;0
466;APP-BIZTALK-WW-WW-AOS-APPLI;;2;90;80;0
467;APP-BIZTALK-WW-WW-DB-SRVW9033;;2;90;80;0
468;APP-BIZTALK-WW-WW-OS-SRVW9033;;2;90;80;0
469;APP-BIZTALK-WW-WW-VIP-SRVW9033;;2;90;80;0
470;APP-BIZTALK-WW-WW-SERVER-DATABASE-SRVW9033;;2;90;80;0
471;APP-BIZTALK-WW-WW-DB-SRVW9034;;2;90;80;0
472;APP-BIZTALK-WW-WW-OS-SRVW9034;;2;90;80;0
473;APP-BIZTALK-WW-WW-VIP-SRVW9034;;2;90;80;0

 

I appreciate any advice or guidance on resolving this issue. Thank you!

Antoine SAADA

hello, have you managed to complete your map in API ? For our part, we cannot add elements (shape, host...Etc.) without overwriting the map with each request; We would like to complete our map, and remain without a clear explanation of the API on this point from support. Thanks for your help.

Reply