【发布时间】:2018-10-11 06:37:31
【问题描述】:
我们在 cumulocity 的警报类型方面遇到了一个令人费解的问题。
我们发现,当我们通过 HTTPS 或 MQTT 使用代理创建警报时,第一个警报创建(对于给定类型)的“类型”字段决定了任何后续调用的严重性和文本字段同类型。
例如,如果 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 的。缓存不会延续到新的设备/托管对象。
但是,在我们的整个租约中,对于任何来源,任何带有 {type: "Warning"} 或其“类型”以前缀“警告”开头的警报,都会有{severity: "WARNING", text: "WOAHDUDE"}.
概括地说,如果我们尝试创建一个从任何来源发出的类型为“警告”的警报,一个新的 "WOAHDUDE" 会出现在我们的仪表板中。
在某个时候,我使用{severity: "WARNING", type: "Warning", text: "WOAHDUDE"} 创建了一个警报。我不知道这如何在整个租约中建立某种“WOAHDUDE”模板,但似乎有。如何撤消此操作?
【问题讨论】:
标签: cumulocity