基于类型的 Cumulocity 警报文本重写

Cumulocity Alarm Text Rewriting based on Type

我们在 cumulocity 的警报类型方面遇到了一个令人困惑的问题。

我们发现,当我们通过 HTTPS 或 MQTT 使用代理创建警报时,第一个警报创建(对于给定类型)的 "type" 字段确定严重性和文本字段具有相同类型的任何后续调用。

例如,如果第一次运行 MQTT 代理,它会运行:

client.publish('s/us', '301,Critical,TextA');
await waitFor(400);
client.publish('s/us', '302,Major,TextB');
await waitFor(400);
client.publish('s/us', '303,Minor,TextC');
await waitFor(400);
client.publish('s/us', '304,Warning,TextD');

如果相同的代码行随后更改为:

// Note that 301 is used for all alarms, indicating severity critical
client.publish('s/us', '301,Critical,Apple');
await waitFor(400);
client.publish('s/us', '301,Major,Banana');
await waitFor(400);
client.publish('s/us', '301,Minor,Coconut');
await waitFor(400);
client.publish('s/us', '301,Warning,Durian');

无论我们现在为每个警报指定严重程度 CRITICAL 和不同的文本,创建的警报都将具有与其严重程度和第一组调用中的文本相对应的严重程度和文本;例如,将创建一个带有 {severity: "MAJOR", text: "TextB"} 的新警报。

奇怪的是,这种行为似乎基于前缀。如果将代码更改为:

client.publish('s/us', '301,Critical1000,Apple');
await waitFor(400);
client.publish('s/us', '301,Major1000,Banana');
await waitFor(400);
client.publish('s/us', '301,Minor1000,Coconut');
await waitFor(400);
client.publish('s/us', '301,Warning1000,Durian');

创建的警报将再次保留第一个警报创建时的严重性和文本,例如将创建带有 {severity: "MAJOR", text: "TextB", type: "Major1000"} 的第三个警报。

好的,所以正在进行某种基于前缀的缓存。也许有办法清除它?

然而,我还没有描述最神秘的现象。到目前为止,我所涉及的一切都是基于每个 ManagedObject 的。缓存不会转移到新的 device/managed 对象。

但是,在我们的整个租约中,对于任何来源,任何带有 {type: "Warning"} 的警报,或其 "type" 以前缀 "Warning",将有 {severity: "WARNING", text: "WOAHDUDE"}.

概括地说,如果我们尝试创建从任何来源发出的类型为 "Warning" 的警报,我们的仪表板中会显示一个新的 "WOAHDUDE"

在某个时候,我用{severity: "WARNING", type: "Warning", text: "WOAHDUDE"}创建了一个闹钟。我不知道这是如何在整个租约中建立某种 "WOAHDUDE" 模板的,但它似乎有。我该如何撤消此操作?

我觉得你遇到的只是告警去重(https://www.cumulocity.com/guides/reference/alarms/搜索去重)

每当具有给定类型 x 的设备存在活动警报并且您为具有相同类型的同一设备创建新警报时,警报将被完全丢弃,并且在第一个警报中计数器会增加。

因此,如果第二个警报具有不同的严重性、文本或任何其他信息,则此信息不会更新到现有警报中。

关于所有具有前缀 "Warning" 的警报在类型中获得相同文本的问题。也许您在管理中创建了一个警报映射。这些映射是租户范围的,并且会在创建时覆盖警报的严重性和文本。