# Service Notification

The `ServiceNotificationEvent` is used to monitor all services in the Cloud.

### Methods

1. **`getNodeId()`** Returns the ID of the node.
2. **`getServiceId()`** Returns the ID of the service.
3. **`getServiceState()`** Returns the state of the service.
4. **`getTemplateId()`** Returns the template ID of the service's template.
5. **`getTemplateName()`** Returns the templae name of the service's template.

{% code title="# Available service states" %}

```java
REQUESTED, PREPARING, CPU_BUSY, STARTING, RUNNING, IN_USE, OFFLINE
```

{% endcode %}

### Code example

```java
@Eventable
public void handle(ServiceNotificationEvent event) {
    ServiceState serviceState = ServiceState.valueOf(event.getServiceState());

    final String templateName = event.getTemplateName();
    final String serviceId = event.getServiceId().substring(0, 5);
    final String nodeId = event.getNodeId() == null ? "Unknown" : event.getNodeId().substring(0, 5);

    switch (serviceState) {
        case REQUESTED -> broadcast("Service %s-%s has been queued".formatted(templateName, serviceId));
        case STARTING -> broadcast("Service %s-%s is now starting on Node-%s".formatted(templateName, serviceId, nodeId));
        case RUNNING -> broadcast("Service %s-%s is now running on Node-%s".formatted(templateName, serviceId, nodeId));
        case OFFLINE -> broadcast("Service %s-%s is now stopping on Node-%s".formatted(templateName, serviceId, nodeId));
    }
}
```
