python查询日志,并组装sql,修复缺失的数据

news2024/11/8 10:37:37

前言

由于mysql链接超时波动,导致数据缺失,需要根据日志填补数据

流程

获取确实数据的订单列表

搜索日志,获取请求日志

根据请求日志拼装sql

打印sql供修复数据

代码

因为我们日志打印的有问题,所以这里用字符串截取获取入参。如果日志打印的是标准json,直接搞json即可

from elasticsearch import Elasticsearch
import json

class MyUtils:
    pass

    def getValue(fullStr, beginStr, endStr):
        start = fullStr.find(beginStr) + len(beginStr)
        end = fullStr.find(endStr)
        value = fullStr[start:end]
        return value


    def setValue(orderInfoExt, columnName, fullStr, beginStr, endStr):
        value = MyUtils.getValue(fullStr, beginStr, endStr)
        if value != 'null':
            orderInfoExt[columnName] = value


es = Elasticsearch(hosts="http://xxx:9200/", http_auth=('xxx', 'xxx'))
scroll_id = None
fileName = "create-order-info" + ".txt"
orderIdList = [74xxxx574,
               74xxxx822
              ]
orderExtInfoList = []




for orderId in orderIdList:
    query_json = {
        "_source": ["message", "logger_name", "@timestamp"],
        "query": {
            "bool": {
                "filter":
                    [
                        {
                            "bool":
                                {
                                    "filter":
                                        [
                                            {
                                                "multi_match":
                                                    {
                                                        "lenient": True,
                                                        "query": "order/v1/createOrder",
                                                        "type": "phrase"
                                                    }
                                            },
                                            {
                                                "multi_match":
                                                    {
                                                        "lenient": True,
                                                        "query": orderId,
                                                        "type": "phrase"
                                                    }
                                            }
                                        ]
                                }
                        },
                        {
                            "range":
                                {
                                    "@timestamp":
                                        {
                                            "format": "strict_date_optional_time",
                                            "gte": "2024-11-01T00:00:00.000Z",
                                            "lte": "2024-11-02T10:00:00.000Z"
                                        }
                                }
                        }
                    ],
                "must":
                    [
                    ],
                "must_not":
                    [
                    ],
                "should":
                    [
                    ]
            }
        }
    }
    query = es.search(index='xxxx-pro*', body=query_json, scroll='25m', size=5000,
                      request_timeout=2000000)

    for k in query['hits']['hits']:
        timestr = k['_source']['@timestamp']
        request = k['_source']['message']
        orderInfoExt = {}
        #beancopy的字段
        MyUtils.setValue(orderInfoExt, 'user_device_mac', request, "userDeviceMac=", ", userDeviceImei")
        MyUtils.setValue(orderInfoExt, 'user_device_imei', request, "userDeviceImei=", ", userDeviceImsi")

        #特殊的字段

        MyUtils.setValue(orderInfoExt, 'order_id', request, "orderId=", ", oid")
        MyUtils.setValue(orderInfoExt, 'user_order_ip', request, "userIpAddr=", ", userPort")
        #print(orderInfoExt)
        orderExtInfoList.append(orderInfoExt)
# 假设表名为 orders
table_name = 'order_info_ext'
for orderInfoExt in orderExtInfoList:
    # 提取列名
    columns = ', '.join(orderInfoExt.keys())
    # 提取值,并处理为适当的格式
    values = []
    for key, value in orderInfoExt.items():
        if value == 'null':
            values.append('NULL')
        elif isinstance(value, (int, float)):
            values.append(str(value))
        elif isinstance(value, str):
            values.append("'"+value+"'")
        else:
            values.append('NULL')

    # 构建 INSERT 语句
    sql = f"INSERT INTO {table_name} ({columns}) VALUES ({', '.join(values)});"

    print(sql)




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2235751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小白入门学习计算机辅助工具--Git和Github

虽然平时大家都有听过Github,但这实际上要分为Git和Github,我们可以简单理解为前者是用于本地,后者是远程端。下面我们来看看一些基本的操作。 Github创建仓库 让我们先从Github开始,点击右边的绿色按钮new进入创建库界面&#x…

【C++】哈希表封装 unordered_map 和 unordered_set 的实现过程

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriori…

攀拓(PAT)- 程序设计(乙级)2024年春季考试

题目来源:https://pintia.cn/market/item/1767454903977603072 B-1 题目要求 2024 这个数字,可以由 n n n个互不相同的正偶数和 m m m个互不相同的正奇数组合出来吗?本题就请你回答这个问题。 输入格式: 输入在一行中给出一个…

STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55

STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55 前面我们讲述了几种BootLoader中的命令,包括获取软件版本号、获取帮助、获取芯片ID、读取Flash保护Level。 下面我们来介绍一下BootLoader中最重要的功能之一—跳转!就像BootLoader词汇中的Boot…

VTK知识学习(2)-环境搭建

1、c方案 1.1下载源码编译 官网获取源码。 利用Cmake进行项目构建。 里面要根据实际使用的情况配置相关的模块哟,这个得你自行研究下了。 CMAKEINSTALLPREFIX--这个选项的值表示VTK的安装路径,默认的路径是C:/Program Files/VTK。该选项的值可不作更…

Chrome(谷歌浏览器中文版)下载安装(Windows 11)

目录 Chrome_10_30工具下载安装 Chrome_10_30 工具 系统:Windows 11 下载 官网:https://chrome.google-zh.com/,点击立即下载 下载完成(已经下过一遍所以点了取消) 安装 解压,打开安装包 点击下一步…

如何在算家云搭建Aatrox-Bert-VITS2(音频生成)

一、模型介绍 ‌ Aatrox - Bert -VITS2 模型是一种基于深度学习的语音合成系统,结合了 BERT 的预训练能力和 VITS2 的微调技术,旨在实现高质量的个性化语音合成。 二、模型搭建流程 1. 创建容器实例 进入算家云的“应用社区”,点击搜索找到…

232转485模块测试

概述 常用的PLC一般会有两个左右的232口,以及两个左右的485口,CAN口等,但是PLC一般控制的设备可能会有很多,会超出通讯口的数量,此时我们一般会采用一个口接多个设备,这种情况下要注意干扰等因素&#xff0…

静态数组类型无法用“=“给整个静态数组赋值

基础知识: 什么是静态数组类型? 在 C 中,静态数组是一种在编译时大小固定的数组。这意味着一旦声明,静态数组的大小就不能改变。 ------ 你可以声明一个静态数组并选择性地初始化它: int arr[10]; // 声明一个包…

使用 Python 调用云 API 实现批量共享自定义镜像

本文介绍如何通过 Python SDK 调用 API 接口,通过子用户批量共享云服务器自定义镜像。若您具备类似需求,或想了解如何使用 SDK,可参考本文进行操作。 前提条件 已创建子用户,并已具备云服务器及云 API 所有权限。 创建子用户请…

【旷视科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

GISBox VS ArcGIS:分别适用于大型和小型项目的两款GIS软件

在现代地理信息系统(GIS)领域,有许多大家耳熟能详的GIS软件。它们各自具有独特的优势,适用于不同的行业需求和使用场景。在众多企业和开发者面前,如何选择合适的 GIS 软件成为了一个值得深入思考的问题。今天&#xff…

【Spring】Spring Web MVC基础入门~(含大量例子)

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:什么是Spring Web MVC 1:Servlet 2:总结 二:MVC …

数组类算法【leetcode】

704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 二分查找 用于有序数组中,没有重复的数组。…

24/11/7 算法笔记 PCA主成分分析

假如我们的数据集是n维的,共有m个数据(x,x,...,x)。我们希望将这m个数据的维度从n维降到k维,希望这m个k维的数据集尽可能的代表原始数据集。我们知道数据从n维降到k维肯定会有损失,但是我们希望损失尽可能的小。那么如何让这k维的数据尽可能表…

wxWidgets布局管理及XRC界面使用解惑

wxWidgets布局,通常就是wxBoxSizer,当然还有别的Sizer,就像Qt中的Layout一样,各种布局管理类。只是如今的wxWidgets尚未发展起来,一般其他的你用的比较少,因为这个最简单,最容易布局&#xff0c…

【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)

博主说明:本文项目编号 T 062 ,文末自助获取源码 \color{red}{T062,文末自助获取源码} T062,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

【循环引用及格式化输出】

垃圾回收机制 当一个值在内存中直接引用跟间接引用的量为0时,(即这个值没有任何入口可以找到它)那么这个值就会被清空回收♻️,释放内存空间; 列表在内存中的存储方式 1)引用计数的两种方式 x "ea…

31.7K+ Star!AgentGPT:一个在浏览器中运行的Agent

AgentGPT 简介 AgentGPT[1] 是一个可以让你在浏览器中组装、配置和部署自主AI代理的项目。你可以为你的自定义AI命名,并让它去实现任何你想象中目标。它将尝试通过思考要执行的任务、执行它们并从结果中学习来达成目标。 项目特点 主要特点 自主AI代理:用户可以自定义AI并赋…

【大模型】通过Crew AI 公司的崛起之路学习 AI Agents 的用法

AI 技术的迅猛发展正以前所未有的速度重塑商业格局,而 AI Agents,作为新一代的智能自动化工具,正逐步成为创新型公司的核心力量。在本文中,我们将探讨如何利用 AI Agents 构建一家 AI 驱动的公司,并详细了解 Crew AI 创…