Go语言代码解析:获取 HTTP 数据并与数据库交互
这段代码实现了一个获取 HTTP 数据的函数 get_http_data 和一个与数据库交互的函数 CallDba。
get_http_data 函数
get_http_data 函数接受一个查询 SQL 作为参数,返回一个包含查询结果的切片。函数内部的逻辑如下:
- 使用
http.Get发送一个 GET 请求获取数据,请求的 URL 是传入的查询 SQL。 - 如果发生错误,打印错误信息。
- 使用
ioutil.ReadAll读取响应体的所有数据。 - 定义一个
MetricJsonData结构体变量TempResultData,用于存储解析后的 JSON 数据。 - 使用
json.Unmarshal将响应体的数据解析为TempResultData。 - 如果解析出错,打印错误信息。
- 将解析后的结果
TempResultData.Data.Result赋值给ResultsData。 - 返回
ResultsData。
CallDba 函数
CallDba 函数接受一个 DbCallObj 结构体作为参数,用于与数据库进行交互。函数内部的逻辑如下:
- 检查数据库的连接状态,如果连接正常,则继续执行下面的逻辑。
- 根据
DbCallData.metricName的值,判断要执行的操作。 - 如果
metricName为 'ActiveSession',并且Instance为 '10.251.95.6:3306',则设置value为 150,count_time为 5,然后调用DbCallInterface函数。 - 如果
metricName为 'ActiveSession',并且Instance不为 '10.251.95.6:3306',则设置value为 50,count_time为 4,然后调用DbCallInterface函数,并重复执行几次,每次设置不同的value和count_time。 - 如果
metricName为 'Delay',并且Instance为指定的几个 IP 地址和端口号的组合,设置value为 12000,count_time为 6,然后调用DbCallInterface函数。 - 如果
metricName为 'Delay',并且Instance不是上述指定的几个 IP 地址和端口号的组合,设置value为 300,count_time为 3,然后调用DbCallInterface函数。 - 如果
metricName为 'ConnUseRate',设置value为 70,count_time为 3,然后调用DbCallInterface函数。 - 如果
metricName为 'ConnUseRate',设置value为 80,count_time为 2,no_insert为 1,然后调用DbCallInterface函数。 - 如果
metricName为 'IO' 或 'SQL',设置value为 0,count_time为 3,然后调用DbCallInterface函数。 - 如果数据库连接状态不正常,打印相应的错误信息,并调用
CallDbaRealTime函数处理异常情况。
DbCallInterface 函数
DbCallInterface 函数接受一个 DbCallObj 结构体作为参数,用于根据数据库的调用状态更新数据库。函数内部的逻辑如下:
- 调用
GetCallStatus函数获取数据库的调用状态。 - 如果
obj.obj_status为 true,执行下面的逻辑。 - 如果
Instance的值是指定的几个 IP 地址和端口号的组合,直接返回。 - 如果
Instance的值包含指定的几个 IP 地址的子字符串,直接返回。 - 如果
metricName不是 'TPS',并且不满足其他特定条件,直接返回。 - 调用
CallDbaRealTime函数处理异常情况。 - 调用
PushMessage函数推送消息。 - 根据传入的 SQL 语句执行数据库操作。
db_exec 函数
db_exec 函数用于执行数据库操作。函数内部的逻辑如下:
- 使用
sql.Open打开一个 MySQL 数据库连接。 - 如果发生错误,抛出异常。
- 在函数退出时关闭数据库连接。
- 使用
db.Exec执行传入的 SQL 语句。 - 如果发生错误,打印错误信息。
原文地址: https://www.cveoy.top/t/topic/JHS 著作权归作者所有。请勿转载和采集!