小编Pie*_*ens的帖子

使用 WebSockets 扩展 Flask REST API

我目前正在扩展使用 Flask-RESTPlus 创建的现有 REST API,并支持 WebSocket。这个想法是创建一个符合 Web 事物模型的Web 事物(网关)。我的用例中的“事物”是动态添加或删除的。

当前设置允许消费者使用对/thingId/properties/temperature的 HTTP GET 请求从 Thing(例如温度传感器)获取最新值。这些值实际上是从 Kafka 消费的,并临时存储在 Redis 中。

现在我想知道如何扩展此设置并允许消费者不仅轮询最新值,而且使用 WebSockets 订阅事物的属性。我有一个工作解决方案,我为每个属性创建“房间”,但这需要两个单独的服务器和端点的重复。

对于 REST 我有

@app.route('/<thingId>/properties/<propertyId>')
    # get latest datapoint
    return latestDatapoint
Run Code Online (Sandbox Code Playgroud)

对于 Flask-SocketIO 我有

@socketio.on('join')
def on_join(data):
    username = data['username']
    room = data['room'] # e.g. /thingId/properties/temperature
    join_room(room)
    send(username + ' has entered the room.', room=room)
Run Code Online (Sandbox Code Playgroud)

然后我将数据转发到正确的房间,因为它来自 Kafka。在客户端,我需要连接到 WebSocket 服务器并加入房间

socket.on('connection', function(socket){
  socket.emit('join', 'some room');
});
Run Code Online (Sandbox Code Playgroud)

此实现有效,但我强烈希望有如下图所示的替代工作流程,其中客户端连接到 REST API 中使用的相同端点,但使用 WebSocket 协议而不是加入房间等。 网络事物订阅

您是否知道这是否已经存在或是否可行?

flask flask-socketio flask-restplus

5
推荐指数
1
解决办法
2694
查看次数

Grafana 模板:Prometheus label_values 变量的正则表达式

我正在尝试使用label_values函数在 Grafana 中设置模板。该文档指定了查询 label_values 的可能性,例如:

label_values(metric, label)
Run Code Online (Sandbox Code Playgroud)

在我的用例中,有两个主要的度量标准组,其名称类似于:

  • app1_current_sensor1
  • app1_current_sensor2
  • app2_current_sensor2
  • app2_current_sensor3

他们每个人都有一个名为'uid'的标签。我希望使用上述查询过滤一个仪表板上的“app1”和另一个仪表板上的“app2”的用户 ID

我试过了

label_values(app1_current_sensor1, uid)
Run Code Online (Sandbox Code Playgroud)

但是,如果由于某种原因 sensor1 有一段时间没有发送数据,即使 sensor2 正在发送数据,我也不会在仪表板上看到更多用户 ID。

是否可以使用正则表达式作为度量变量的输入?这样的事情对我有用:

label_values(metric=~(app1_[^\s]+), uid)
Run Code Online (Sandbox Code Playgroud)

但我不确定这在 Grafana 中是否可行。

grafana prometheus grafana-templating

1
推荐指数
1
解决办法
7665
查看次数