起因:
项目中需要通过web表单实现动态为prometheus配置报警规则,我负责后端,需要对数据进行校验,报警规则有一定的数据格式,但是使用format来格式化的话处理比较麻烦,于是借助了jinja模板:
import jinja2
rules={
"name":"xxxxxxx",
"rules":[
{
"alert": "z1",
"expr": "up == 0",
"duration": "1m",
"enable": 1,
"labels":{"labels1":"label1","label2":"label2"},
"annotations":{"annotations":"annotations"}
},
{
"alert": "z2",
"expr": "up == 0",
"duration": "1m",
"enable": 1,
"labels":{"label1":"label1","label2":"label2"},
"annotations":{"annotation1":"annotation1","annotation2":"annotation2"}
}
],
"desc":"group DESC NEW1"
}
RENDER_RULES_TEMPLATE = """groups:
- name: {{ rules.name }}
rules:
{%- for alert in rules.rules %}
- alert: {{ alert.alert }}
expr: {{ alert.expr}}
for: {{ alert.duration }}
labels:
{%- for item in alert.labels %}
{{ item }}: {{ alert.labels[item] }}
{%- endfor %}
annotations:
{%- for item in alert.annotations %}
{{ item }}: {{ alert.annotations[item] }}
{%- endfor %}
{% endfor %}
"""
result = jinja2.Template(source=RENDER_RULES_TEMPLATE).render(rules=rules)
with open('result.yml','w') as fp:
fp.write(result)
结果展示:
MongoDB notes:
mongodb sort limit和skip用法
检索数据可以使用sort()方法来对数据进行排序,指定排序字段,并使用1或-1来指定排序方式是升序或降序。类似于SQL语句中的order by语句。
可以使用limit()方法来读取指定数量的数据,还可以使用skip()方法来跳过指定数量的数据。对分页性能上面效率非常高。
- 语法
db.COLLECTION_NAME.find().sort({KEY:1})
db.COLLECTION_NAME.find().limit(NUMBER)
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
示例:
db.col.find({},{“title”:1,_id:0}).limit(2)
第一个 {} 放 where 条件,为空表示返回集合中所有文档。
第二个 {} 指定那些列显示和不显示 (0表示不显示 1表示显示)。
想要读取从 10 条记录后 100 条记录,相当于 sql 中limit (10,100)。
db.COLLECTION_NAME.find().skip(10).limit(100)