我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
今天尝试使用influxdb。用的官方C#客户端InfluxDB.Client,代码也是来自官方教程。
首先呢,下载安装都挺好,按名字搜索嘛,然后就是复制粘贴官方代码,就在web管理界面上嘛。(这篇是吐槽,不是新手教程)
编译,发现函数参数顺序不正确:
var point = PointData
.Measurement("mem")
.Tag("host", "host1")
.Field("used_percent", 23.43234543)
.Timestamp(DateTime.UtcNow, WritePrecision.Ns);
using (var writeApi = client.GetWriteApi())
{
writeApi.WritePoint(bucket, org, point);现在的版本是point在第一个
}
这种小调整嘛,可以理解,随手就改过来了嘛。
然后执行代码,挺好,一切正常。
然后就要写我自己的业务代码了,我一行数据好多字段的,要在循环里面加,大概就是这样:
var point = PointData
.Measurement("mem")
.Tag("host", "host1")
//.Field("used_percent", 23.43234543)这句就不要了
.Timestamp(DateTime.UtcNow, WritePrecision.Ns);
foreach(...)
{
point.Field(name,value);在这里添加每个字段
}
using (var writeApi = client.GetWriteApi())
{
writeApi.WritePoint(bucket, org, point);
}
小意思,是吧?然后这个代码就死活不工作了,插不了任何数据。
考虑会不会是我添加的tag和field有问题啊,各种替换啊,替换到测试代码正确,正式代码就是不行。具体就略了,大家都是程序员,很懂这种状态。
最后去看了看相关调用的源代码:
public PointData Field(string name, string value)
{
return PutField(name, value);
}
private PointData PutField(string name, object value)
{
Arguments.CheckNonEmptyString(name, "Field name");
ImmutableSortedDictionary<string, object> immutableSortedDictionary = _fields;
if (immutableSortedDictionary.ContainsKey(name))
{
immutableSortedDictionary = immutableSortedDictionary.Remove(name);
}
immutableSortedDictionary = immutableSortedDictionary.Add(name, value);
return new PointData(_measurementName, Precision, _time, _tags, immutableSortedDictionary);无语了,这里竟然是返回一个新对象!
}
额滴个神啊!Field()调用最后竟然是返回一个新对象!
(吐槽结束)
标签:name,point,C#,代码,InfluxDB,Field,官方,value,immutableSortedDictionary From: https://blog.csdn.net/2301_77171572/article/details/137608073