You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

125 lines
3.9 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Tiobon.PublishHelper
{
public partial class Form_Logger : Form
{
DevServer _server = null;
Hospital _hospital = null;
string _model = "";
string form_name = "";
int count = 1;
int countlast = 1;
public Form_Logger(DevServer server, Hospital hospital, string model)
{
InitializeComponent();
_server = server;
_hospital = hospital;
_model = model;
form_name = $"日志 - {server.Ip} - {hospital.FileName}({hospital.DefaultFort}) - {model}";
Text = form_name;
}
private void Form_Logger_Load(object sender, EventArgs e)
{
new Thread(new ThreadStart(() =>
{
while (!b_close)
{
SetLogger();
while (--count > 0 && !b_close)
{
BeginInvoke(new EventHandler(delegate
{
this.Text = $"{form_name} - 下一次刷新剩余 {count} 秒...";
}));
System.Threading.Thread.Sleep(1000);
}
while (count < 0)
{
System.Threading.Thread.Sleep(1000);
}
}
})).Start();
}
private void linkLabel_Refresh_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
count = -1;
SetLogger();
}
object m_Lock = new object();
bool m_In = false;
private void SetLogger()
{
lock (m_Lock)
{
if (m_In)
{
return;
}
m_In = true;
}
try
{
BeginInvoke(new EventHandler(delegate
{
this.Text = $"{form_name} - 正在获取日志...";
var res = SshHelper.ExcuteCmd(_server, DockerCommand.GetDockerContainerName(_hospital.FileName, _model));
if (res.Success)
{
res = SshHelper.ExcuteCmd(_server, DockerCommand.GetDockerLogs(res.Result.Trim('\n')));
if (res.Success)
{
var log = res.Result;
if (log.Contains("\u001b"))
{
foreach (System.Text.RegularExpressions.Match item in Utility.m_RegexUb.Matches(log))
{
log = log.Replace(item.Value, string.Empty);
}
}
if (this.txt_Log.Text != log)
this.txt_Log.Text = log;//.Replace("\n", "\r\n");
}
}
count = countlast + 2;
if (count >= 60)
{
count = 60;
}
countlast = count;
}));
}
catch { }
finally
{
m_In = false;
}
}
private void txt_Log_TextChanged(object sender, EventArgs e)
{
if (txt_Log.Text.Length <= 0)
return;
txt_Log.SelectionStart = txt_Log.Text.Length;
txt_Log.ScrollToCaret();
}
bool b_close = false;
private void Form_Logger_FormClosing(object sender, FormClosingEventArgs e)
{
b_close = true;
}
}
}