当前位置: 首页 > news >正文

C# 中使用 Influxdb 1.x(三)

基于前面2节介绍,借助AI,搭建更完善的功能测试案例,实现如下功能:

功能点

  1. 创建Measurement,
  2. 插入单个数据点,
  3. 批量插入数据点,
  4. 查询数据,
  5. 删除数据,
  6. 显示数据库信息,
  7. 管理连续查询,
  8. 退出
    功能测试基于代码创建的sensor_data 数据库
    在这里插入图片描述

创建Measurements

在这里插入图片描述

        #region 创建Measurement(向数据表中插入数据,及创建表)private static async Task CreateMeasurement(){AnsiConsole.MarkupLine("[bold underline]创建新的Measurement[/]");// 获取Measurement名称var measurement = AnsiConsole.Ask<string>("输入Measurement名称:");// 创建示例数据点来初始化Measurementvar point = new Point{Name = measurement,Tags = new Dictionary<string, object>{{ "location", "example" }},Fields = new Dictionary<string, object>{{ "value", 0.0 },{ "status", "init" }},Timestamp = DateTime.UtcNow};try{await _influxDbClient.Client.WriteAsync(point, DatabaseName);AnsiConsole.MarkupLine($"[bold green]Measurement '{measurement}' 创建成功![/]");}catch (Exception ex){AnsiConsole.MarkupLine($"[bold red]创建失败: {ex.Message}[/]");}}#endregion

插入单点数据和批量数据

在这里插入图片描述
在这里插入图片描述

        #region 插入数据private static async Task InsertSingleDataPoint(){AnsiConsole.MarkupLine("[bold underline]插入单个数据点[/]");var measurement = AnsiConsole.Ask<string>("输入Measurement名称:");var location = AnsiConsole.Ask<string>("输入位置标签:");var value = AnsiConsole.Ask<double>("输入数值:");var status = AnsiConsole.Prompt(new SelectionPrompt<string>().Title("选择状态").AddChoices("正常", "警告", "故障"));var point = new Point{Name = measurement,Tags = new Dictionary<string, object>{{ "location", location }},Fields = new Dictionary<string, object>{{ "value", value },{ "status", status }},Timestamp = DateTime.UtcNow};try{await _influxDbClient.Client.WriteAsync(point, DatabaseName);AnsiConsole.MarkupLine($"[bold green]数据点插入成功![/]");// 显示插入的数据点var table = new Table();table.AddColumn("Measurement");table.AddColumn("Location");table.AddColumn("Value");table.AddColumn("Status");table.AddColumn("Timestamp");var data = DateTime.Now;table.AddRow(measurement,location,value.ToString("F2"),status,point.Timestamp?.ToString("yyyy-MM-dd HH:mm:ss"));AnsiConsole.Write(table);}catch (Exception ex){AnsiConsole.MarkupLine($"[bold red]插入失败: {ex.Message}[/]");}}private static async Task InsertBatchDataPoints(){AnsiConsole.MarkupLine("[bold underline]批量插入数据点[/]");var measurement = AnsiConsole.Ask<string>("输入Measurement名称:");var location = AnsiConsole.Ask<string>("输入位置标签:");var count = AnsiConsole.Ask<int>("要插入的数据点数量:", 5);var points = new List<Point>();var random = new Random();for (int i = 0; i < count; i++){var value = Math.Round(20 + random.NextDouble() * 10, 2);var status = value > 28 ? "警告" : "正常";points.Add(new Point{Name = measurement,Tags = new Dictionary<string, object>{{ "location", location }},Fields = new Dictionary<string, object>{{ "value", value },{ "status", status }},Timestamp = DateTime.UtcNow.AddMinutes(-count + i)});}try{await _influxDbClient.Client.WriteAsync(points, DatabaseName);AnsiConsole.MarkupLine($"[bold green]成功插入 {count} 个数据点![/]");// 显示部分插入的数据点var table = new Table();table.AddColumn("序号");table.AddColumn("Measurement");table.AddColumn("Location");table.AddColumn("Value");table.AddColumn("Status");table.AddColumn("Timestamp");for (int i = 0; i < Math.Min(3, points.Count); i++){var point = points[i];table.AddRow((i + 1).ToString(),measurement,location,point.Fields["value"].ToString(),point.Fields["status"].ToString(),point.Timestamp?.ToString("yyyy-MM-dd HH:mm:ss"));}if (points.Count > 3){table.AddRow("...", "...", "...", "...", "...", "...");}AnsiConsole.Write(table);}catch (Exception ex){AnsiConsole.MarkupLine($"[bold red]批量插入失败: {ex.Message}[/]");}}#endregion

查询数据

在这里插入图片描述

   #region 查询数据private static async Task QueryData(){AnsiConsole.MarkupLine("[bold underline]查询数据[/]");var measurement = AnsiConsole.Ask<string>("输入Measurement名称:");var location = AnsiConsole.Ask<string>("输入位置标签 (或按回车查询所有位置):", "all");var hours = AnsiConsole.Ask<int>("查询过去多少小时的数据:", 24);var whereClause = location != "all"? $"WHERE location = '{location}'": "";var query = $"SELECT * FROM \"{measurement}\" {whereClause} " +$"WHERE time > now() - {hours}h";try{var response = await _influxDbClient.Client.QueryAsync(query, DatabaseName);
http://www.dtcms.com/a/610581.html

相关文章:

  • 【第1章·第4节】逻辑阵列操作与应用举例
  • 百度网站下拉排名网站线上运营
  • 西宁网站制作多少钱什么是电商行业
  • 蓝光3D扫描仪在汽车模具质量控制中的应用:提升金属与注塑模具的尺寸检测效率
  • 免费自建商城网站楼盘推荐排行榜
  • VCU上下电流程学习(二)
  • 课程网站建设的目的意义做自己的网站怎么赚钱
  • Ts基础(一)—— 类型
  • ASC学习笔记0010:效果被应用时的委托
  • 深圳深圳建设网站wordpress网盘主题
  • 北京齐力众信网站建设自己怎么制作网站
  • 想找一家公司设计网站wordpress链接设置方法
  • LeetCode 424 - 替换后的最长重复字符
  • 数据结构--9:反射、枚举以及lambda表达式(了解即可)
  • Chartjs画二氧化碳浓度曲线
  • ts语法ts语法ts语法
  • 网站打开慢原因wordpress多站点 用户同步
  • 游戏被IP限制多开,如何在同一网络下用不同IP多开游戏?
  • MiniCPM-o 2.6 小参数挑战巨头 多模态直播流直达手机
  • 网站创建免费用户可信赖的手机网站设计
  • C++20--- concept 关键字 为模板参数提供了编译期可验证的约束机制
  • 厦门市住宅建设办公室网站php开发工具 wordpress
  • 用dw做一个个人网站营销网站建设优化
  • Catia中 零件 部件 产品
  • 自动化技术演进:从工具执行到认知决策,AI如何重塑业务自动化?
  • Springboot美食私厨在线预约管理系统5zf46km2(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 网站建设公司十大id导入不了wordpress
  • php网站开发权限管理wordpress随机幻灯片
  • 团购小程序区域化运营:多门店管理、配送范围设置与本地化活动开发
  • 企业网站备案时间荆州seo优化