From 1afe548ac40cc7f975917ef9bf2e156595cf81f3 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 16 四月 2026 08:58:04 +0800
Subject: [PATCH] 优化;
---
HMI.LogViewer/LogViewer.xaml.cs | 216 +++++++++++++++++++++++++++++++++++++----------------
1 files changed, 149 insertions(+), 67 deletions(-)
diff --git a/HMI.LogViewer/LogViewer.xaml.cs b/HMI.LogViewer/LogViewer.xaml.cs
index da25941..a2fc8f4 100644
--- a/HMI.LogViewer/LogViewer.xaml.cs
+++ b/HMI.LogViewer/LogViewer.xaml.cs
@@ -6,6 +6,7 @@
using System.Data;
using System.IO;
using System.Linq;
+using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
@@ -32,6 +33,29 @@
private Timer autoRfhTimer;
+ private long pageSize = 50;
+
+ private long currentPage = 1;
+ public long CurrentPage
+ {
+ get => currentPage;
+ set
+ {
+ Set(ref currentPage, value);
+ Filtrate(value, pageSize);
+ }
+ }
+
+ private long maxPage = 1;
+ public long MaxPage
+ {
+ get => maxPage;
+ set
+ {
+ Set(ref maxPage, value);
+ }
+ }
+
public LogViewer()
{
@@ -39,11 +63,12 @@
autoRfhTimer = new Timer
{
Enabled = false,
- Interval = 1000,
+ Interval = 1500,
AutoReset = false
};
autoRfhTimer.Elapsed += AutoRfhTimer_Elapsed;
InitializeComponent();
+ QueryReset();
}
public override void InitFinish()
@@ -72,7 +97,6 @@
//}
}
-
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
Loaded -= UserControl_Loaded;
@@ -82,6 +106,10 @@
{
Refresh100items();
}
+
+ //private void RefreshTable() {
+ // if(CurrentPage == )
+ //}
private void Button_Click(object sender, RoutedEventArgs e)
{
@@ -93,12 +121,18 @@
break;
case "resetBtn":
QueryReset();
+ CurrentPage = 1;
break;
case "exportBtn":
+ DoExport();
break;
default:
break;
}
+ }
+
+ private void DoExport() {
+
}
private void QueryLog()
@@ -118,9 +152,10 @@
return;
}
- queryBtn.IsEnabled = false;
- autoRfhInput.IsEnabled = false;
- Filtrate();
+ AutoRfh = false;
+ //queryBtn.IsEnabled = false;
+ //autoRfhInput.IsEnabled = false;
+ CurrentPage = 1;
}
catch (Exception ex)
{
@@ -136,27 +171,60 @@
private void QueryReset()
{
+ var today = DateTime.Now;
+ var start = DateTime.Parse(today.ToString("yyyy-MM-dd 00:00:00")).AddDays(-7);
+ var end = DateTime.Parse(today.ToString("yyyy-MM-dd 00:00:00")).AddDays(1);
+
levelInput.Text = null;
- startTimeInput.SelectedDateTime = null;
- endTimeInput.SelectedDateTime = null;
- startTimeInput.Text = null;
- table.ItemsSource = null;
+ startTimeInput.SelectedDateTime = start;
+ endTimeInput.SelectedDateTime = end;
}
- private void Filtrate()
+ private void Filtrate(long page, long size)
{
- string str = LoadSql();
- DataTable dt = new DataTable();
- var files = GetOldDbFiles(PathHelper.LogViewerDir, new DateTime?[] { startTimeInput.SelectedDateTime,
- endTimeInput.SelectedDateTime });
- foreach (string file in files)
+ try
{
- SqliteHelper sql = new SqliteHelper(file);
- dt.Merge(sql.GetDataTable(str));
- sql.Close();
+ var files = GetOldDbFiles(PathHelper.LogViewerDir, new DateTime?[] { startTimeInput.SelectedDateTime,
+ endTimeInput.SelectedDateTime });
+ if (files.Length <= 0)
+ {
+ table.ItemsSource = new DataTable().DefaultView;
+ return;
+ }
+
+ using (Sqlite3Helper helper = new Sqlite3Helper(files[0]))
+ {
+ for (int i = 0; i < files.Length; i++)
+ {
+ var attach = $"ATTACH DATABASE '{files[i]}' AS 'db{i}'";
+ helper.Execute(attach);
+ }
+
+ string sql = string.Join(" UNION ALL ", GetSqls(files));
+
+ string sortName = "time", sortDirection = "DESC";
+
+ string baseSql = $"SELECT level,time,source,text FROM ({sql}) as _temp";
+
+ string countSql = $"SELECT COUNT(1) FROM ({sql}) as __temp";
+
+ long total = (long)helper.SelectOne(countSql);
+ long pages = (total/pageSize)+ ((total % pageSize) > 0 ? 1 : 0);
+
+ sql = $"{baseSql} ORDER BY {sortName} {sortDirection} LIMIT {size} OFFSET {(page - 1) * size} ";
+
+ DataTable dt = helper.GetDataTable(sql);
+ table.ItemsSource = dt.DefaultView;
+
+ MaxPage = pages;
+ }
+
}
- dt.DefaultView.Sort = "time Desc";
- table.ItemsSource = dt.DefaultView;
+ catch (Exception ex)
+ {
+ log.Error("Select Log Error.", ex);
+ MsgBoxHelper2.Error($"鏌ヨ澶辫触: {ex.Message}");
+ }
}
public static string[] GetOldDbFiles(string folderPath, DateTime?[] range)
@@ -174,9 +242,9 @@
var lastWriteTime = File.GetLastWriteTime(file);
bool flag = true;
if (range[0] != null) flag &= lastWriteTime >= range[0];
- if (range[1] != null) flag &= lastWriteTime <= range[1];
+ //if (range[1] != null) flag &= lastWriteTime <= range[1];
return flag;
- }).ToArray();
+ }).OrderByDescending(f => f).ToArray();
return oldFiles;
}
@@ -187,35 +255,40 @@
}
/// <summary>
- /// 鍔犺浇鐣岄潰鍒ゆ柇鏁版嵁搴撹鍙�
+ ///
/// </summary>
- /// <returns> str鏁版嵁搴撶殑璇彞 </returns>
- private string LoadSql()
+ /// <param name="files"></param>
+ /// <returns></returns>
+ private string[] GetSqls(string[] files)
{
- string sql = " select level,time,source,text from log";
- List<string> datas = new List<string>();
- if (!string.IsNullOrEmpty(levelInput.Text))
+ string[] sqls = new string[files.Length];
+ for (int i = 0; i < files.Length; i++)
{
- datas.Add($"level='{levelInput.Text}'");
- }
- if (!string.IsNullOrEmpty(startTimeInput.Text))
- {
- datas.Add($"time>='{startTimeInput.Text}'");
- }
- if (!string.IsNullOrEmpty(endTimeInput.Text))
- {
- datas.Add($"time<='{endTimeInput.Text}'");
- }
- if (!string.IsNullOrEmpty(sourceInput.Text))
- {
- datas.Add($"source='{sourceInput.Text}'");
- }
+ string sql = $"SELECT level,time,source,text FROM db{i}.log";
+ List<string> datas = new List<string>();
+ if (!string.IsNullOrEmpty(levelInput.Text))
+ {
+ datas.Add($"level='{levelInput.Text}'");
+ }
+ if (!string.IsNullOrEmpty(startTimeInput.Text))
+ {
+ datas.Add($"time>='{startTimeInput.Text}'");
+ }
+ if (!string.IsNullOrEmpty(endTimeInput.Text))
+ {
+ datas.Add($"time<'{endTimeInput.Text}'");
+ }
+ if (!string.IsNullOrEmpty(sourceInput.Text))
+ {
+ datas.Add($"source='{sourceInput.Text}'");
+ }
- string condition = string.Join(" AND ", datas);
- condition = string.IsNullOrEmpty(condition) ? string.Empty : $" WHERE {condition}";
-
- sql = $"{sql}{condition} order by time desc";
- return sql;
+ string condition = string.Join(" AND ", datas);
+ condition = string.IsNullOrEmpty(condition) ? string.Empty : $" WHERE {condition}";
+ sql = $"{sql}{condition}";
+ sqls[i] = sql;
+ }
+ return sqls;
}
/// <summary>
@@ -223,28 +296,37 @@
/// </summary>
private void Refresh100items()
{
- try
+ autoRfhTimer.Enabled = false;
+ Task.Run(() =>
{
- autoRfhTimer.Enabled = false;
- string todayLogFile = Path.Combine(PathHelper.LogViewerDir, $"log_{DateTime.Today:yyyy-MM-dd}.db");
- if (!File.Exists(todayLogFile)) return;
- string str = "select level,time,source,text from log order by time desc limit 100";
- SqliteHelper sql = new SqliteHelper(todayLogFile);
- var dt = sql.GetDataTable(str);
- this.Dispatcher.BeginInvoke((Action)delegate ()
+ try
{
- table.ItemsSource = dt.DefaultView;
- });
- }
- catch (Exception ex)
- {
- log.Error("Log Auto Refresh Failed.", ex);
- this.Error($"鑷姩鍒锋柊澶辫触锛亄ex.Message}");
- }
- finally
- {
- autoRfhTimer.Enabled = AutoRfh;
- }
+ string todayLogFile = Path.Combine(PathHelper.LogViewerDir, $"log_{DateTime.Today:yyyy-MM-dd}.db");
+ if (!File.Exists(todayLogFile)) return;
+ string str = "select level,time,source,text from log order by time desc limit 100";
+ using (SqliteHelper sql = new SqliteHelper(todayLogFile))
+ {
+ var dt = sql.GetDataTable(str);
+ this.Dispatcher.BeginInvoke((Action)delegate ()
+ {
+ table.ItemsSource = dt.DefaultView;
+ MaxPage = 1;
+ });
+ }
+ }
+ catch (Exception ex)
+ {
+ log.Error("Log Auto Refresh Failed.", ex);
+ this.Error($"鑷姩鍒锋柊澶辫触锛亄ex.Message}");
+ }
+ finally
+ {
+ this.Dispatcher.BeginInvoke((Action)delegate ()
+ {
+ autoRfhTimer.Enabled = AutoRfh;
+ });
+ }
+ });
}
}
}
--
Gitblit v1.9.1