35 changed files with 868 additions and 75 deletions
@ -0,0 +1,60 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2024 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.service.notification.rule.trigger; |
||||
|
|
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import org.apache.commons.collections.CollectionUtils; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.thingsboard.server.common.data.notification.info.EdgeConnectivityNotificationInfo; |
||||
|
import org.thingsboard.server.common.data.notification.info.RuleOriginatedNotificationInfo; |
||||
|
import org.thingsboard.server.common.data.notification.rule.trigger.EdgeConnectivityTrigger; |
||||
|
import org.thingsboard.server.common.data.notification.rule.trigger.config.EdgeConnectivityNotificationRuleTriggerConfig; |
||||
|
import org.thingsboard.server.common.data.notification.rule.trigger.config.EdgeConnectivityNotificationRuleTriggerConfig.EdgeConnectivityEvent; |
||||
|
import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerType; |
||||
|
|
||||
|
@Service |
||||
|
@RequiredArgsConstructor |
||||
|
public class EdgeConnectivityTriggerProcessor implements NotificationRuleTriggerProcessor<EdgeConnectivityTrigger, EdgeConnectivityNotificationRuleTriggerConfig> { |
||||
|
|
||||
|
@Override |
||||
|
public boolean matchesFilter(EdgeConnectivityTrigger trigger, EdgeConnectivityNotificationRuleTriggerConfig triggerConfig) { |
||||
|
EdgeConnectivityEvent event = trigger.isConnected() ? EdgeConnectivityEvent.CONNECTED : EdgeConnectivityEvent.DISCONNECTED; |
||||
|
if (!triggerConfig.getNotifyOn().contains(event)) { |
||||
|
return false; |
||||
|
} |
||||
|
if (CollectionUtils.isNotEmpty(triggerConfig.getEdges())) { |
||||
|
return triggerConfig.getEdges().contains(trigger.getEdgeId().getId()); |
||||
|
} |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public RuleOriginatedNotificationInfo constructNotificationInfo(EdgeConnectivityTrigger trigger) { |
||||
|
return EdgeConnectivityNotificationInfo.builder() |
||||
|
.eventType(trigger.isConnected() ? "connected" : "disconnected") |
||||
|
.tenantId(trigger.getTenantId()) |
||||
|
.customerId(trigger.getCustomerId()) |
||||
|
.edgeId(trigger.getEdgeId()) |
||||
|
.edgeName(trigger.getEdgeName()) |
||||
|
.build(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public NotificationRuleTriggerType getTriggerType() { |
||||
|
return NotificationRuleTriggerType.EDGE_CONNECTIVITY; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,54 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2024 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.service.notification.rule.trigger; |
||||
|
|
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import org.apache.commons.collections.CollectionUtils; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.thingsboard.server.common.data.notification.info.EdgeFailureNotificationInfo; |
||||
|
import org.thingsboard.server.common.data.notification.info.RuleOriginatedNotificationInfo; |
||||
|
import org.thingsboard.server.common.data.notification.rule.trigger.EdgeFailureTrigger; |
||||
|
import org.thingsboard.server.common.data.notification.rule.trigger.config.EdgeFailureNotificationRuleTriggerConfig; |
||||
|
import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerType; |
||||
|
|
||||
|
@Service |
||||
|
@RequiredArgsConstructor |
||||
|
public class EdgeFailureTriggerProcessor implements NotificationRuleTriggerProcessor<EdgeFailureTrigger, EdgeFailureNotificationRuleTriggerConfig> { |
||||
|
|
||||
|
@Override |
||||
|
public boolean matchesFilter(EdgeFailureTrigger trigger, EdgeFailureNotificationRuleTriggerConfig triggerConfig) { |
||||
|
if (CollectionUtils.isNotEmpty(triggerConfig.getEdges())) { |
||||
|
return !triggerConfig.getEdges().contains(trigger.getEdgeId().getId()); |
||||
|
} |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public RuleOriginatedNotificationInfo constructNotificationInfo(EdgeFailureTrigger trigger) { |
||||
|
return EdgeFailureNotificationInfo.builder() |
||||
|
.tenantId(trigger.getTenantId()) |
||||
|
.edgeId(trigger.getEdgeId()) |
||||
|
.customerId(trigger.getCustomerId()) |
||||
|
.edgeName(trigger.getEdgeName()) |
||||
|
.errorMsg(trigger.getErrorMsg()) |
||||
|
.build(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public NotificationRuleTriggerType getTriggerType() { |
||||
|
return NotificationRuleTriggerType.EDGE_FAILURE; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,67 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2024 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.common.data.notification.info; |
||||
|
|
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Builder; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
import org.thingsboard.server.common.data.id.CustomerId; |
||||
|
import org.thingsboard.server.common.data.id.EdgeId; |
||||
|
import org.thingsboard.server.common.data.id.EntityId; |
||||
|
import org.thingsboard.server.common.data.id.TenantId; |
||||
|
|
||||
|
import java.util.Map; |
||||
|
|
||||
|
import static org.thingsboard.server.common.data.util.CollectionsUtil.mapOf; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
@Builder |
||||
|
public class EdgeConnectivityNotificationInfo implements RuleOriginatedNotificationInfo { |
||||
|
|
||||
|
private String eventType; |
||||
|
private TenantId tenantId; |
||||
|
private CustomerId customerId; |
||||
|
private EdgeId edgeId; |
||||
|
private String edgeName; |
||||
|
|
||||
|
@Override |
||||
|
public Map<String, String> getTemplateData() { |
||||
|
return mapOf( |
||||
|
"eventType", eventType, |
||||
|
"tenantId", tenantId.toString(), |
||||
|
"edgeId", edgeId.toString(), |
||||
|
"edgeName", edgeName |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public TenantId getAffectedTenantId() { |
||||
|
return tenantId; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public CustomerId getAffectedCustomerId() { |
||||
|
return customerId; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public EntityId getStateEntityId() { |
||||
|
return edgeId; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,68 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2024 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.common.data.notification.info; |
||||
|
|
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Builder; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
import org.thingsboard.server.common.data.EntityType; |
||||
|
import org.thingsboard.server.common.data.id.CustomerId; |
||||
|
import org.thingsboard.server.common.data.id.EdgeId; |
||||
|
import org.thingsboard.server.common.data.id.EntityId; |
||||
|
import org.thingsboard.server.common.data.id.TenantId; |
||||
|
|
||||
|
import java.util.Map; |
||||
|
|
||||
|
import static org.thingsboard.server.common.data.util.CollectionsUtil.mapOf; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
@Builder |
||||
|
public class EdgeFailureNotificationInfo implements RuleOriginatedNotificationInfo { |
||||
|
|
||||
|
private TenantId tenantId; |
||||
|
private CustomerId customerId; |
||||
|
private EdgeId edgeId; |
||||
|
private String edgeName; |
||||
|
private String errorMsg; |
||||
|
|
||||
|
@Override |
||||
|
public Map<String, String> getTemplateData() { |
||||
|
return mapOf( |
||||
|
"tenantId", tenantId.toString(), |
||||
|
"edgeId", edgeId.toString(), |
||||
|
"edgeName", edgeName, |
||||
|
"errorMsg", errorMsg |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public TenantId getAffectedTenantId() { |
||||
|
return tenantId; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public CustomerId getAffectedCustomerId() { |
||||
|
return customerId; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public EntityId getStateEntityId() { |
||||
|
return edgeId; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,63 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2024 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.common.data.notification.rule.trigger; |
||||
|
|
||||
|
import lombok.Builder; |
||||
|
import lombok.Data; |
||||
|
import org.thingsboard.server.common.data.id.CustomerId; |
||||
|
import org.thingsboard.server.common.data.id.EdgeId; |
||||
|
import org.thingsboard.server.common.data.id.EntityId; |
||||
|
import org.thingsboard.server.common.data.id.TenantId; |
||||
|
import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerType; |
||||
|
|
||||
|
import java.util.UUID; |
||||
|
import java.util.concurrent.TimeUnit; |
||||
|
|
||||
|
@Data |
||||
|
@Builder |
||||
|
public class EdgeConnectivityTrigger implements NotificationRuleTrigger { |
||||
|
|
||||
|
private final TenantId tenantId; |
||||
|
private final CustomerId customerId; |
||||
|
private final EdgeId edgeId; |
||||
|
private final boolean connected; |
||||
|
private final String edgeName; |
||||
|
|
||||
|
@Override |
||||
|
public boolean deduplicate() { |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public String getDeduplicationKey() { |
||||
|
return String.join(":", NotificationRuleTrigger.super.getDeduplicationKey(), edgeName, String.valueOf(connected)); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public long getDefaultDeduplicationDuration() { |
||||
|
return TimeUnit.HOURS.toMillis(3); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public NotificationRuleTriggerType getType() { |
||||
|
return NotificationRuleTriggerType.EDGE_CONNECTIVITY; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public EntityId getOriginatorEntityId() { |
||||
|
return edgeId; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,62 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2024 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.common.data.notification.rule.trigger; |
||||
|
|
||||
|
import lombok.Builder; |
||||
|
import lombok.Data; |
||||
|
import org.thingsboard.server.common.data.id.CustomerId; |
||||
|
import org.thingsboard.server.common.data.id.EdgeId; |
||||
|
import org.thingsboard.server.common.data.id.EntityId; |
||||
|
import org.thingsboard.server.common.data.id.TenantId; |
||||
|
import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerType; |
||||
|
|
||||
|
import java.util.concurrent.TimeUnit; |
||||
|
|
||||
|
@Data |
||||
|
@Builder |
||||
|
public class EdgeFailureTrigger implements NotificationRuleTrigger { |
||||
|
|
||||
|
private final TenantId tenantId; |
||||
|
private final CustomerId customerId; |
||||
|
private final EdgeId edgeId; |
||||
|
private final String edgeName; |
||||
|
private final String errorMsg; |
||||
|
|
||||
|
@Override |
||||
|
public boolean deduplicate() { |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public String getDeduplicationKey() { |
||||
|
return String.join(":", NotificationRuleTrigger.super.getDeduplicationKey(), edgeName, errorMsg); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public long getDefaultDeduplicationDuration() { |
||||
|
return TimeUnit.HOURS.toMillis(2); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public NotificationRuleTriggerType getType() { |
||||
|
return NotificationRuleTriggerType.EDGE_FAILURE; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public EntityId getOriginatorEntityId() { |
||||
|
return edgeId; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,46 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2024 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.common.data.notification.rule.trigger.config; |
||||
|
|
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Builder; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
import javax.validation.constraints.NotEmpty; |
||||
|
import java.util.Set; |
||||
|
import java.util.UUID; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
@Builder |
||||
|
public class EdgeConnectivityNotificationRuleTriggerConfig implements NotificationRuleTriggerConfig { |
||||
|
|
||||
|
private Set<UUID> edges; // if empty - all edges
|
||||
|
@NotEmpty |
||||
|
private Set<EdgeConnectivityEvent> notifyOn; |
||||
|
|
||||
|
@Override |
||||
|
public NotificationRuleTriggerType getTriggerType() { |
||||
|
return NotificationRuleTriggerType.EDGE_CONNECTIVITY; |
||||
|
} |
||||
|
|
||||
|
public enum EdgeConnectivityEvent { |
||||
|
CONNECTED, DISCONNECTED |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,39 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2024 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.common.data.notification.rule.trigger.config; |
||||
|
|
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Builder; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
import java.util.Set; |
||||
|
import java.util.UUID; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
@Builder |
||||
|
public class EdgeFailureNotificationRuleTriggerConfig implements NotificationRuleTriggerConfig { |
||||
|
|
||||
|
private Set<UUID> edges; // if empty - all edges
|
||||
|
|
||||
|
@Override |
||||
|
public NotificationRuleTriggerType getTriggerType() { |
||||
|
return NotificationRuleTriggerType.EDGE_FAILURE; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,57 @@ |
|||||
|
#### Edge notification templatization |
||||
|
|
||||
|
<div class="divider"></div> |
||||
|
<br/> |
||||
|
|
||||
|
Notification subject and message fields support templatization. |
||||
|
The list of available templatization parameters depends on the template type. |
||||
|
See the available types and parameters below: |
||||
|
|
||||
|
Available template parameters: |
||||
|
|
||||
|
* `edgeId` - the edge id as uuid string; |
||||
|
* `edgeName` - the name of the edge; |
||||
|
* `eventType` - the string representation of the connectivity status: connected or disconnected; |
||||
|
|
||||
|
Parameter names must be wrapped using `${...}`. For example: `${edgeName}`. |
||||
|
You may also modify the value of the parameter with one of the suffixes: |
||||
|
|
||||
|
* `upperCase`, for example - `${edgeName:upperCase}` |
||||
|
* `lowerCase`, for example - `${edgeName:lowerCase}` |
||||
|
* `capitalize`, for example - `${edgeName:capitalize}` |
||||
|
|
||||
|
<div class="divider"></div> |
||||
|
|
||||
|
##### Examples |
||||
|
|
||||
|
Let's assume the notification about the connecting Edge into the ThingsBoard. |
||||
|
The following template: |
||||
|
|
||||
|
```text |
||||
|
Edge '${edgeName}' is ${eventType} |
||||
|
{:copy-code} |
||||
|
``` |
||||
|
|
||||
|
will be transformed to: |
||||
|
|
||||
|
```text |
||||
|
Edge 'DatacenterEdge' is connected |
||||
|
``` |
||||
|
|
||||
|
<br/> |
||||
|
|
||||
|
The following template: |
||||
|
|
||||
|
```text |
||||
|
"Edge '${edgeName}' is now ${eventType}" |
||||
|
{:copy-code} |
||||
|
``` |
||||
|
|
||||
|
will be transformed to: |
||||
|
|
||||
|
```text |
||||
|
Edge 'DatacenterEdge' is now connected |
||||
|
``` |
||||
|
|
||||
|
<br> |
||||
|
<br> |
||||
@ -0,0 +1,57 @@ |
|||||
|
#### Edge notification templatization |
||||
|
|
||||
|
<div class="divider"></div> |
||||
|
<br/> |
||||
|
|
||||
|
Notification subject and message fields support templatization. |
||||
|
The list of available templatization parameters depends on the template type. |
||||
|
See the available types and parameters below: |
||||
|
|
||||
|
Available template parameters: |
||||
|
|
||||
|
* `edgeId` - the edge id as uuid string; |
||||
|
* `edgeName` - the name of the edge; |
||||
|
* `errorMsg` - the string representation of the error, occurred on the Edge; |
||||
|
|
||||
|
Parameter names must be wrapped using `${...}`. For example: `${edgeName}`. |
||||
|
You may also modify the value of the parameter with one of the suffixes: |
||||
|
|
||||
|
* `upperCase`, for example - `${edgeName:upperCase}` |
||||
|
* `lowerCase`, for example - `${edgeName:lowerCase}` |
||||
|
* `capitalize`, for example - `${edgeName:capitalize}` |
||||
|
|
||||
|
<div class="divider"></div> |
||||
|
|
||||
|
##### Examples |
||||
|
|
||||
|
Let's assume the notification about the failing of processing connection to Edge. |
||||
|
The following template: |
||||
|
|
||||
|
```text |
||||
|
Edge '${edgeName}' received error |
||||
|
{:copy-code} |
||||
|
``` |
||||
|
|
||||
|
will be transformed to: |
||||
|
|
||||
|
```text |
||||
|
Edge 'DatacenterEdge' received error |
||||
|
``` |
||||
|
|
||||
|
<br/> |
||||
|
|
||||
|
The following template: |
||||
|
|
||||
|
```text |
||||
|
Error message: '${errorMsg}' |
||||
|
{:copy-code} |
||||
|
``` |
||||
|
|
||||
|
will be transformed to: |
||||
|
|
||||
|
```text |
||||
|
Error message: 'Failed to process edge connection!' |
||||
|
``` |
||||
|
|
||||
|
<br> |
||||
|
<br> |
||||
Loading…
Reference in new issue