File: logexportthread.h

package info (click to toggle)
deepin-log-viewer 6.5.8%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 14,752 kB
  • sloc: cpp: 61,723; ansic: 1,732; xml: 81; sh: 59; makefile: 12
file content (262 lines) | stat: -rw-r--r-- 17,341 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#ifndef LOGEXPORTTHREAD_H
#define LOGEXPORTTHREAD_H
#include "structdef.h"

#include <QRunnable>
#include <QObject>
#include <QStandardItemModel>

/**
 * @brief The LogExportThread class 导出日志线程类
 */
class LogExportThread : public QObject, public QRunnable
{
    Q_OBJECT
public:
    explicit LogExportThread(QObject *parent = nullptr);
    ~LogExportThread();
    /**
     * @brief The RUN_MODE enum 导出类型,用于执行时判断要执行的逻辑
     */
    enum RUN_MODE {
        HtmlModel, //数据来源是model,导出格式为Html
        HtmlJOURNAL, //数据来源是系统日志数据结构体的list,导出格式为Html
        HtmlAPP, //数据来源是应用日志数据结构体的list,导出格式为Html
        HtmlDPKG, //数据来源是dpkg日志数据结构体的list,导出格式为Html
        HtmlBOOT, //数据来源是启动日志数据结构体的list,导出格式为Html
        HtmlXORG, //数据来源是xorg日志数据结构体的list,导出格式为Html
        HtmlNORMAL, //数据来源是开关机日志数据结构体的list,导出格式为Html
        HtmlKWIN, //数据来源是kwin日志数据结构体的list,导出格式为Html
        HtmlDNF,
        HtmlDMESG,
        HtmlAUDIT, //数据来源是audit日志数据结构体的list,导出格式为html
        TxtModel, //数据来源是model,导出格式为txt
        TxtJOURNAL, //数据来源是系统日志数据结构体的list,导出格式为txt
        TxtAPP, //数据来源是应用日志数据结构体的list,导出格式为txt
        TxtDPKG, //数据来源是dpkg日志数据结构体的list,导出格式为txt
        TxtBOOT, //数据来源是启动日志数据结构体的list,导出格式为txt
        TxtXORG, //数据来源是xorg日志数据结构体的list,导出格式为txt
        TxtNORMAL, //数据来源是开关机日志数据结构体的list,导出格式为txt
        TxtKWIN, //数据来源是kwin日志数据结构体的list,导出格式为txt
        TxtDNF,
        TxtDMESG,
        TxtAUDIT, //数据来源是audit日志数据结构体的list,导出格式为txt
        DocModel, //数据来源是model,导出格式为doc
        DocJOURNAL, //数据来源是系统日志数据结构体的list,导出格式为doc
        DocAPP, //数据来源是应用日志数据结构体的list,导出格式为doc
        DocDPKG, //数据来源是dpkg日志数据结构体的list,导出格式为doc
        DocBOOT, //数据来源是启动日志数据结构体的list,导出格式为doc
        DocXORG, //数据来源是xorg日志数据结构体的list,导出格式为doc
        DocNORMAL, //数据来源是开关机日志数据结构体的list,导出格式为doc
        DocKWIN, //数据来源是kwin日志数据结构体的list,导出格式为doc
        DocDNF,
        DocDMESG,
        DocAUDIT, //数据来源是audit日志数据结构体的list,导出格式为doc
        XlsModel, //数据来源是model,导出格式为xlxs
        XlsJOURNAL, //数据来源是系统日志数据结构体的list,导出格式为xlxs
        XlsAPP, //数据来源是应用日志数据结构体的list,导出格式为xlxs
        XlsDPKG, //数据来源是dpkg日志数据结构体的list,导出格式为xlxs
        XlsBOOT, //数据来源是启动日志数据结构体的list,导出格式为xlxs
        XlsXORG, //数据来源是xorg日志数据结构体的list,导出格式为xlxs
        XlsNORMAL, //数据来源是开关机日志数据结构体的list,导出格式为xlxs
        XlsKWIN, //数据来源是kwin日志数据结构体的list,导出格式为xlxs
        XlsDNF,
        XlsDMESG,
        XlsAUDIT, //数据来源是audit日志数据结构体的list,导出格式为xlxs
        ZipCoredump,
        NoneExportType = 9999 //任何行为
    };

    void enableAppendExport(bool bEnable = true);

    void exportToTxtPublic(const QString &fileName, QStandardItemModel *pModel, LOG_FLAG flag);
    void exportToTxtPublic(const QString &fileName, const QList<QString> &jList,  const QStringList &labels, LOG_FLAG flag);
    void exportToTxtPublic(const QString &fileName, const QList<LOG_MSG_JOURNAL> &jList,  const QStringList &labels, LOG_FLAG flag);
    void exportToTxtPublic(const QString &fileName, const QList<LOG_MSG_APPLICATOIN> &jList, const QStringList &labels, const QString &iAppName);
    void exportToTxtPublic(const QString &fileName, const QList<LOG_MSG_DPKG> &jList, const QStringList &labels);
    void exportToTxtPublic(const QString &fileName, const QList<LOG_MSG_BOOT> &jList, const QStringList &labels);
    void exportToTxtPublic(const QString &fileName, const QList<LOG_MSG_XORG> &jList, const QStringList &labels);
    void exportToTxtPublic(const QString &fileName, const QList<LOG_MSG_NORMAL> &jList, const QStringList &labels);
    void exportToTxtPublic(const QString &fileName, const QList<LOG_MSG_KWIN> &jList, const QStringList &labels);
    void exportToTxtPublic(const QString &fileName, const QList<LOG_MSG_DNF> &jList, const QStringList &labels);
    void exportToTxtPublic(const QString &fileName, const QList<LOG_MSG_DMESG> &jList, const QStringList &labels);
    void exportToTxtPublic(const QString &fileName, const QList<LOG_MSG_AUDIT> &jList, const QStringList &labels);

    void exportToHtmlPublic(const QString &fileName, QStandardItemModel *pModel, LOG_FLAG flag);
    void exportToHtmlPublic(const QString &fileName, const QList<QString> &jList,  const QStringList &labels, LOG_FLAG flag);
    void exportToHtmlPublic(const QString &fileName, const QList<LOG_MSG_JOURNAL> &jList,  const QStringList &labels, LOG_FLAG flag);
    void exportToHtmlPublic(const QString &fileName, const QList<LOG_MSG_APPLICATOIN> &jList, const QStringList &labels, const QString &iAppName);
    void exportToHtmlPublic(const QString &fileName, const QList<LOG_MSG_DPKG> &jList, const QStringList &labels);
    void exportToHtmlPublic(const QString &fileName, const QList<LOG_MSG_BOOT> &jList, const QStringList &labels);
    void exportToHtmlPublic(const QString &fileName, const QList<LOG_MSG_XORG> &jList, const QStringList &labels);
    void exportToHtmlPublic(const QString &fileName, const QList<LOG_MSG_NORMAL> &jList, const QStringList &labels);
    void exportToHtmlPublic(const QString &fileName, const QList<LOG_MSG_KWIN> &jList, const QStringList &labels);
    void exportToHtmlPublic(const QString &fileName, const QList<LOG_MSG_DNF> &jList, const QStringList &labels);
    void exportToHtmlPublic(const QString &fileName, const QList<LOG_MSG_DMESG> &jList, const QStringList &labels);
    void exportToHtmlPublic(const QString &fileName, const QList<LOG_MSG_AUDIT> &jList, const QStringList &labels);

    void exportToDocPublic(const QString &fileName, QStandardItemModel *pModel, LOG_FLAG flag);
    void exportToDocPublic(const QString &fileName, const QList<QString> &jList, const QStringList &labels, LOG_FLAG iFlag);
    void exportToDocPublic(const QString &fileName, const QList<LOG_MSG_JOURNAL> &jList, const QStringList &labels, LOG_FLAG iFlag);
    void exportToDocPublic(const QString &fileName, const QList<LOG_MSG_APPLICATOIN> &jList, const QStringList &labels, const QString &iAppName);
    void exportToDocPublic(const QString &fileName, const QList<LOG_MSG_DPKG> &jList, const QStringList &labels);
    void exportToDocPublic(const QString &fileName, const QList<LOG_MSG_BOOT> &jList, const QStringList &labels);
    void exportToDocPublic(const QString &fileName, const QList<LOG_MSG_XORG> &jList, const QStringList &labels);
    void exportToDocPublic(const QString &fileName, const QList<LOG_MSG_NORMAL> &jList, const QStringList &labels);
    void exportToDocPublic(const QString &fileName, const QList<LOG_MSG_KWIN> &jList, const QStringList &labels);
    void exportToDocPublic(const QString &fileName, const QList<LOG_MSG_DNF> &jList, const QStringList &labels);
    void exportToDocPublic(const QString &fileName, const QList<LOG_MSG_DMESG> &jList, const QStringList &labels);
    void exportToDocPublic(const QString &fileName, const QList<LOG_MSG_AUDIT> &jList, const QStringList &labels);

    void exportToXlsPublic(const QString &fileName, QStandardItemModel *pModel, LOG_FLAG flag);
    void exportToXlsPublic(const QString &fileName, const QList<QString> &jList, const QStringList &labels, LOG_FLAG iFlag);
    void exportToXlsPublic(const QString &fileName, const QList<LOG_MSG_JOURNAL> &jList, const QStringList &labels, LOG_FLAG iFlag);
    void exportToXlsPublic(const QString &fileName, const QList<LOG_MSG_APPLICATOIN> &jList, const QStringList &labels, const QString &iAppName);
    void exportToXlsPublic(const QString &fileName, const QList<LOG_MSG_DPKG> &jList, const QStringList &labels);
    void exportToXlsPublic(const QString &fileName, const QList<LOG_MSG_BOOT> &jList, const QStringList &labels);
    void exportToXlsPublic(const QString &fileName, const QList<LOG_MSG_XORG> &jList, const QStringList &labels);
    void exportToXlsPublic(const QString &fileName, const QList<LOG_MSG_NORMAL> &jList, const QStringList &labels);
    void exportToXlsPublic(const QString &fileName, const QList<LOG_MSG_KWIN> &jList, const QStringList &labels);
    void exportToXlsPublic(const QString &fileName, const QList<LOG_MSG_DNF> &jList, const QStringList &labels);
    void exportToXlsPublic(const QString &fileName, const QList<LOG_MSG_DMESG> &jList, const QStringList &labels);
    void exportToXlsPublic(const QString &fileName, const QList<LOG_MSG_AUDIT> &jList, const QStringList &labels);

    void exportToZipPublic(const QString &fileName, const QList<LOG_MSG_COREDUMP> &jList, const QStringList &labels);

    bool isProcessing();
public slots:
    // 停止线程
    void stopImmediately();
public:
    //是否可以运行获取逻辑,用来停止线程
    bool m_canRunning = false;
protected:
    void run() override;
signals:
    /**
     * @brief sigProgress 导出进度信号
     * @param nCur 当前运行到的进度
     * @param nTotal 要运行的总数
     */
    void sigProgress(int nCur, int nTotal);
    /**
     * @brief sigResult 导出完成信号
     * @param isSuccess 是否成功
     */
    void sigResult(bool isSuccess);
    void sigProcessFull();
    /**
     * @brief sigError 导出失败
     * @param iError 失败信息
     */
    void sigError(QString iError);
private:
    bool exportToTxt(const QString &fileName, QStandardItemModel *pModel, LOG_FLAG flag);
    bool exportToTxt(const QString &fileName, const QList<QString> &jList,  const QStringList &labels, LOG_FLAG flag);
    bool exportToTxt(const QString &fileName, const QList<LOG_MSG_JOURNAL> &jList,  const QStringList &labels, LOG_FLAG flag);
    bool exportToTxt(const QString &fileName, const QList<LOG_MSG_APPLICATOIN> &jList, const QStringList &labels, const QString &iAppName);
    bool exportToTxt(const QString &fileName, const QList<LOG_MSG_DPKG> &jList, const QStringList &labels);
    bool exportToTxt(const QString &fileName, const QList<LOG_MSG_BOOT> &jList, const QStringList &labels);
    bool exportToTxt(const QString &fileName, const QList<LOG_MSG_XORG> &jList, const QStringList &labels);
    bool exportToTxt(const QString &fileName, const QList<LOG_MSG_NORMAL> &jList, const QStringList &labels);
    bool exportToTxt(const QString &fileName, const QList<LOG_MSG_KWIN> &jList, const QStringList &labels);
    bool exportToTxt(const QString &fileName, const QList<LOG_MSG_DNF> &jList, const QStringList &labels);
    bool exportToTxt(const QString &fileName, const QList<LOG_MSG_DMESG> &jList, const QStringList &labels);
    bool exportToTxt(const QString &fileName, const QList<LOG_MSG_AUDIT> &jList, const QStringList &labels);

    bool exportToDoc(const QString &fileName, const QList<QString> &jList, const QStringList &labels, LOG_FLAG iFlag);
    bool exportToDoc(const QString &fileName, const QList<LOG_MSG_JOURNAL> &jList, const QStringList &labels, LOG_FLAG iFlag);
    bool exportToDoc(const QString &fileName, const QList<LOG_MSG_APPLICATOIN> &jList, const QStringList &labels, QString &iAppName);
    bool exportToDoc(const QString &fileName, const QList<LOG_MSG_DPKG> &jList, const QStringList &labels);
    bool exportToDoc(const QString &fileName, const QList<LOG_MSG_BOOT> &jList, const QStringList &labels);
    bool exportToDoc(const QString &fileName, const QList<LOG_MSG_XORG> &jList, const QStringList &labels);
    bool exportToDoc(const QString &fileName, const QList<LOG_MSG_NORMAL> &jList, const QStringList &labels);
    bool exportToDoc(const QString &fileName, const QList<LOG_MSG_KWIN> &jList, const QStringList &labels);
    bool exportToDoc(const QString &fileName, const QList<LOG_MSG_DNF> &jList, const QStringList &labels);
    bool exportToDoc(const QString &fileName, const QList<LOG_MSG_DMESG> &jList, const QStringList &labels);
    bool exportToDoc(const QString &fileName, const QList<LOG_MSG_AUDIT> &jList, const QStringList &labels);

    bool exportToHtml(const QString &fileName, QStandardItemModel *pModel, LOG_FLAG flag);
    bool exportToHtml(const QString &fileName, const QList<QString> &jList,  const QStringList &labels, LOG_FLAG flag);
    bool exportToHtml(const QString &fileName, const QList<LOG_MSG_JOURNAL> &jList,  const QStringList &labels, LOG_FLAG flag);
    bool exportToHtml(const QString &fileName, const QList<LOG_MSG_APPLICATOIN> &jList, const QStringList &labels, QString &iAppName);
    bool exportToHtml(const QString &fileName, const QList<LOG_MSG_DPKG> &jList, const QStringList &labels);
    bool exportToHtml(const QString &fileName, const QList<LOG_MSG_BOOT> &jList, const QStringList &labels);
    bool exportToHtml(const QString &fileName, const QList<LOG_MSG_XORG> &jList, const QStringList &labels);
    bool exportToHtml(const QString &fileName, const QList<LOG_MSG_NORMAL> &jList, const QStringList &labels);
    bool exportToHtml(const QString &fileName, const QList<LOG_MSG_KWIN> &jList, const QStringList &labels);
    bool exportToHtml(const QString &fileName, const QList<LOG_MSG_DNF> &jList, const QStringList &labels);
    bool exportToHtml(const QString &fileName, const QList<LOG_MSG_DMESG> &jList, const QStringList &labels);
    bool exportToHtml(const QString &fileName, const QList<LOG_MSG_AUDIT> &jList, const QStringList &labels);

    bool exportToXls(const QString &fileName, const QList<QString> &jList, const QStringList &labels, LOG_FLAG iFlag);
    bool exportToXls(const QString &fileName, const QList<LOG_MSG_JOURNAL> &jList, const QStringList &labels, LOG_FLAG iFlag);
    bool exportToXls(const QString &fileName, const QList<LOG_MSG_APPLICATOIN> &jList, const QStringList &labels, QString &iAppName);
    bool exportToXls(const QString &fileName, const QList<LOG_MSG_DPKG> &jList, const QStringList &labels);
    bool exportToXls(const QString &fileName, const QList<LOG_MSG_BOOT> &jList, const QStringList &labels);
    bool exportToXls(const QString &fileName, const QList<LOG_MSG_XORG> &jList, const QStringList &labels);
    bool exportToXls(const QString &fileName, const QList<LOG_MSG_NORMAL> &jList, const QStringList &labels);
    bool exportToXls(const QString &fileName, const QList<LOG_MSG_KWIN> &jList, const QStringList &labels);
    bool exportToXls(const QString &fileName, const QList<LOG_MSG_DNF> &jList, const QStringList &labels);
    bool exportToXls(const QString &fileName, const QList<LOG_MSG_DMESG> &jList, const QStringList &labels);
    bool exportToXls(const QString &fileName, const QList<LOG_MSG_AUDIT> &jList, const QStringList &labels);

    bool exportToZip(const QString &fileName, const QList<LOG_MSG_COREDUMP> &jList);

    void initMap();
    QString strTranslate(const QString &iLevelStr);

    /**
     * @brief htmlEscapeCovert html转义字符转换
     * @param htmlMsg html信息
     */
    void htmlEscapeCovert(QString &htmlMsg);

private:
    //导出文件路径
    QString m_fileName = "";
    //model数据源
    QStandardItemModel *m_pModel = nullptr;
    //导出日志类型
    LOG_FLAG m_flag = NONE;
    //如果导出项文本标题
    QStringList m_labels;
    // 通用json格式日志数据
    QList<QString> m_logDataList;

    //系统日志数据源
    QList<LOG_MSG_JOURNAL> m_jList;
    //应用日志数据源
    QList<LOG_MSG_APPLICATOIN> m_appList;
    //dpkg日志数据源
    QList<LOG_MSG_DPKG> m_dpkgList;
    //启动日志数据源
    QList<LOG_MSG_BOOT> m_bootList;
    //xorg日志数据源
    QList<LOG_MSG_XORG> m_xorgList;
    //开关机日志数据源
    QList<LOG_MSG_NORMAL> m_normalList;
    //kwin日志数据源
    QList<LOG_MSG_KWIN> m_kwinList;
    QList<LOG_MSG_DNF> m_dnfList;
    QList<LOG_MSG_DMESG> m_dmesgList;
    QList<LOG_MSG_AUDIT> m_alist;
    QList<LOG_MSG_COREDUMP> m_coredumplist;
    //当前线程执行的逻辑种类
    RUN_MODE m_runMode = NoneExportType;
    //打开文件错误描述
    QString openErroStr = "export open file error";
    //停止导出描述信息
    QString stopStr = "stop export";
    //应用日志导出的应用名称
    QString m_appName = "";
    //日志等级-显示文本键值对
    QMap<QString, QString> m_levelStrMap;
    bool m_appendExport {false};
};

#endif  // LOGEXPORTTHREAD_H