Inconsistent choice for "resource" value: service name / service display name
## Description
Value used by connector for the `resource` attribute is not consistent across those run phases:
1. During connector startup, when it sends events with states of all hosts and services:
resource = service's display_name
2. Then at runtime, following Icinga2 events stream:
resource = service name
## Current result
```
/* ALL EVENTS BELOW ARE RELATED TO THE SAME ICINGA2 SERVICE ON THE SAME HOST */
/* Event sent during startup phase */
{"event_type":"check","output":"OK - load average: 0.25, 0.36, 0.43","timestamp":1711615450,"connector":"icinga","connector_name":"localhost:5665","component":"icinga2","author":"icinga.localhost:5665","resource":"SYS_LUNIX_LOAD","source_type":"resource","state":0}
/* Events sent by forced checks and normal checks after startup phase */
{"event_type":"check","output":"Hot","timestamp":1711615558,"connector":"icinga","connector_name":"localhost:5665","component":"icinga2","author":"icinga.localhost:5665","resource":"load","source_type":"resource","state":1}
{"event_type":"check","output":"OK - load average: 0.45, 0.47, 0.46","timestamp":1711615618,"connector":"icinga","connector_name":"localhost:5665","component":"icinga2","author":"icinga.localhost:5665","resource":"load","source_type":"resource","state":0}
```
## Expected behaviour
For the sake of consistency in events and alarms, resource should by either one or the other at all times.
IMO it should even be configurable:
- some users could configure their connector to always set resource as the service's technical name
- other users expect the display_name (when available), with fallback to service's technical name if service has no display_name
In any case, please refer back to the connector specification – don't know where it is – (and discuss or have spec fixed if this part was missing).
## Context
- Originally reported by customer
- Reproduced on a minimal lab environment at Capensis
- Target Canopsis instance: Canopsis 22.10.13
- Icinga2 2.7.0 from our own [Icinga2 mock env][icinga2-mock]
## How to reproduce
1. Get [Icinga2 mock env][icinga2-mock]
2. Edit `icinga2` service in `docker-compose.yml` as follows (uncomment lines to enable local dir volume of `/etc/icinga2`)
```diff
diff --git a/pro/mock/external-services/icinga2/docker/docker-compose.yml b/pro/mock/external-services/icinga2/docker/docker-compose.yml
index 6becd6a2f2..ac507f5fe7 100644
--- a/pro/mock/external-services/icinga2/docker/docker-compose.yml
+++ b/pro/mock/external-services/icinga2/docker/docker-compose.yml
@@ -18,10 +18,10 @@ services:
#- ICINGAWEB2_ADMIN_USER=icingaadmin
#- ICINGAWEB2_ADMIN_PASS=icinga
#- ICINGA2_USER_FULLNAME=Icinga2 Docker Monitoring Instance
-# volumes:
+ volumes:
# - ./icinga/cache:/var/cache/icinga2
# - ./icinga/certs:/etc/apache2/ssl:ro
-# - ./icinga/etc/icinga2:/etc/icinga2
+ - ./icinga/etc/icinga2:/etc/icinga2
# - ./icinga/etc/icingaweb2:/etc/icingaweb2
# - ./icinga/lib/icinga:/var/lib/icinga2
# - ./icinga/lib/mysql:/var/lib/mysql
```
3. `docker compose up -d` the Icinga2 mock env, wait for its complete startup and readiness
4. Once the `/etc/icinga2` dir is fully populated, edit `icinga/etc/icinga2/conf.d/services.conf`
Edit block `apply Service "load"` to add a `display_name` as follows:
```
apply Service "load" {
import "generic-service"
display_name = "SYS_LUNIX_LOAD"
check_command = "load"
/* Used by the ScheduledDowntime apply rule in `downtimes.conf`. */
vars.backup_downtime = "02:00-03:00"
assign where host.name == NodeName
}
```
5. `docker compose restart icinga2`
6. In Icingaweb2, ensure the service shows the `display_name`, it should read:
> Service: SYS_LUNIX_LOAD (load)
[icinga2-mock]: https://git.canopsis.net/canopsis/canopsis-pro/-/tree/develop/pro/mock/external-services/icinga2
7. Install, configure and launch `connector-icinga2` while `amqp2tty` runs against your target Canopsis instance and watch out for events containing "load" (**case-insensitive**)
```console
$ docker run --rm -e CPS_AMQP_URL=amqp://cpsrabbit:canopsis@rabbitmq/canopsis \
--network=canopsis-pro_default docker.canopsis.net/docker/community/amqp2tty:22.10.13 | grep -i load
```
8. Notice the first event sent (while connector sends startup states of all hosts + services) has the `display_name` as `resource`: "SYS_LUNIX_LOAD"
9. In Icingaweb2, use the manual "Process check result" action 4-5 times in a row to get a hard state, for example "WARNING" (if previously "OK")
10. Notice the runtime event sent by connector now sets the `resource` value with service name (not display name): "load"
issue