using ICSharpCode.SharpZipLib.Zip; using Tiobon.Core.OPS.Tool.OPS.Tool.Helper; using Tiobon.Core.OPS.Tool.OPS.Tool.Src; using System; using System.Data; using System.IO; using System.Linq; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace Tiobon.Core.OPS.Tool.OPS.Tool.View { public partial class Frm_Main : Form { #region 初始化变量 readonly Main_method _method = new Main_method(); bool ischeckselect = false; DateTime _run_time; Thread Flash_Sys_Info; bool Clear_Image { set; get; } #endregion #region 单实例模式 public static Frm_Main frm_Main = null; public Frm_Main() { InitializeComponent(); _method.End_Init = End; Flash_Sys_Info = new Thread(Get_Sys_Info); Flash_Sys_Info.Start(); Const.ReadMultiEnv(); var mes = Const.MultiEnvs.Where(o => o.Ip == Const.config.ip).Select(o => o.Name).ToArray(); this.cmb_MultiEnv.Items.Clear(); this.cmb_MultiEnv.Items.AddRange(mes); if (mes.Any()) this.cmb_MultiEnv.Text = this.cmb_MultiEnv.Items[0].ToString(); } private void Get_Sys_Info() { while (true) { string sys_status = _method.Get_sysstatus(); if (string.IsNullOrEmpty(sys_status)) { sys_status = "获取系统状态失败"; } else { toolStripStatusLabel4.Text = sys_status; } toolStripStatusLabel1.Text = $"时间:" + DateTime.Now.ToString("HH:mm:ss"); Thread.Sleep(1000); //break; } } public static Frm_Main Createfrm_Main() { if (frm_Main == null) frm_Main = new Frm_Main(); return frm_Main; } #endregion #region 安装 private void btn_install_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(txt_filepath.Text)) { return; } //if (Const.config.system != "Linux") //{ // MessageBox.Show("只支持linux服务器!"); // return; //} Clear_Image = cb_clear_image.Checked; if (File.Exists(txt_filepath.Text)) { Const.config.localfile_path = txt_filepath.Text; if (!Const.Is_BadZip(Const.config.localfile_path, out string comment)) { MessageBox.Show("压缩包已损坏,请检查!"); return; } if (string.IsNullOrEmpty(comment)) { MessageBox.Show("此文件非研发部打包的正式版本,不允许使用!"); return; } if (MessageBox.Show(comment, "请核对文件信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) { return; } if (!comment.Trim().StartsWith("Installation Package")) { if (MessageBox.Show($"选择的文件为升级包,不建议直接安装。确定继续使用?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) { return; } } //检测工具是否有更新 if (Update_Tools()) { return; } timer_Timeout.Enabled = true; lbl_usetime.Text = "已用时间:"; _run_time = DateTime.Now; foreach (Control item in Controls) { if (item.Name != "link_catlog") item.Enabled = false; } Task.Factory.StartNew(() => { _method.New_Install(Clear_Image); }); } else { MessageBox.Show("文件不存在,请检查!"); return; } } #endregion #region 操作完毕触发事件 public void End(bool suc) { Invoke(new Action(() => { timer_Timeout.Enabled = false; foreach (Control item in Controls) { item.Enabled = true; } lbl_log.Text = ""; lbl_version.Text = _method.Get_Version(); if (lbl_version.Text != "未安装") { btn_update.Enabled = true; ; btn_install.Enabled = false; } else { btn_update.Enabled = false; btn_install.Enabled = true; } if (suc) { if (MessageBoxEx.Show("操作完成,是否打开首页测试?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { System.Diagnostics.Process.Start($"http://{Const.config.ip}:{ihdis_port}00"); } } })); } #endregion #region 更新 private void btm_update_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(txt_filepath.Text)) { return; } //if (Const.config.system != "Linux") //{ // MessageBox.Show("只支持linux服务器!"); // return; //} Clear_Image = cb_clear_image.Checked; if (File.Exists(txt_filepath.Text)) { Const.config.localfile_path = txt_filepath.Text; if (!Const.Is_BadZip(Const.config.localfile_path, out string comment)) { MessageBox.Show("压缩包已损坏,请检查!"); return; } if (string.IsNullOrEmpty(comment)) { MessageBox.Show("此文件非研发部打包的正式版本,不允许使用!"); return; } if (MessageBox.Show(comment, "请核对文件信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) { return; } if (!comment.Trim().StartsWith("Upgrade Package")) { if (MessageBox.Show($"选择的文件为安装包,不建议直接升级。确定继续使用?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) { return; } } //检查是否已经执行数据库脚本 //if (Const.config.system != "Linux") //{ var dbresult = _method.Get_DbVersion(); if (dbresult.Item1 && !string.IsNullOrEmpty(dbresult.Item2)) { var ver = Const.config.localfile_path.Substring(Const.config.localfile_path.LastIndexOf('\\') + 1).Replace(".zip", ""); if (dbresult.Item2 != ver) { if (MessageBox.Show($"当前数据库版本为:{dbresult.Item2}\r\n待升级的主版本为:{ver}\r\n建议先比对数据库文件,再执行升级操作,是否继续升级主版本?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) { return; } } } //} //检测工具是否有更新 if (Update_Tools()) { return; } timer_Timeout.Enabled = true; lbl_usetime.Text = "已用时间:"; _run_time = DateTime.Now; foreach (Control item in Controls) { if (item.Name != "link_catlog") item.Enabled = false; } Task.Factory.StartNew(() => { _method.New_Update(Clear_Image, comment); }); } else { MessageBox.Show("文件不存在,请检查!"); return; } } #endregion #region 选择文件 private void btn_selectfile_Click(object sender, EventArgs e) { using (OpenFileDialog ofd = new OpenFileDialog()) { ofd.Multiselect = false;//该值确定是否可以选择多个文件 ofd.Title = "请选择文件"; ofd.Filter = "插件zip文件|*.zip"; if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { this.txt_filepath.Text = ofd.FileName; } } } #endregion #region 查看日志 private void link_catlog_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { try { string fname = AppDomain.CurrentDomain.BaseDirectory + "Logs\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".log"; System.Diagnostics.Process.Start("explorer.exe", "/select," + fname); } catch { } } #endregion #region 耗时 private void timer_Timeout_Tick(object sender, EventArgs e) { lbl_log.Text = Const.read_task_log(); var total = DateTime.Now.Subtract(_run_time); lbl_usetime2.Text = $"{total.Minutes}:{total.Seconds}"; } #endregion #region 初始化 private void Frm_Main_Load(object sender, EventArgs e) { if (Const.config.system == "Linux") { this.Text = "运维工具" + $" {Const.config.name} {Const.config.ip}"; } } #endregion #region 退出 private void Frm_Main_FormClosing(object sender, FormClosingEventArgs e) { if (ischeckselect) { _method.stop_test(); Frm_Login.Create_Login().Show(); frm_Main = null; ischeckselect = false; } else { Environment.Exit(0); } } private void 退出ToolStripMenuItem1_Click(object sender, EventArgs e) { Environment.Exit(0); } #endregion #region 工具管理 private void mysql管理ToolStripMenuItem_Click(object sender, EventArgs e) { var version = _method.Get_Version(); if (lbl_version.Text != "未安装") { try { System.Diagnostics.Process.Start($"http://{Const.config.ip}:{ihdis_port}21"); } catch (Exception ex) { var log = ex.ToString(); Const.write_log(log); MessageBox.Show(log, "提示"); } } else { MessageBox.Show("该环境尚未安装!", "提示"); } } private void mQ管理ToolStripMenuItem1_Click(object sender, EventArgs e) { var version = _method.Get_Version(); if (lbl_version.Text != "未安装") { try { System.Diagnostics.Process.Start($"http://{Const.config.ip}:{ihdis_port}81"); } catch (Exception ex) { var log = ex.ToString(); Const.write_log(log); MessageBox.Show(log, "提示"); } } else { MessageBox.Show("该环境尚未安装!", "提示"); } } private void redis管理ToolStripMenuItem1_Click(object sender, EventArgs e) { var version = _method.Get_Version(); if (lbl_version.Text != "未安装") { try { System.Diagnostics.Process.Start($"http://{Const.config.ip}:{ihdis_port}22"); } catch (Exception ex) { var log = ex.ToString(); Const.write_log(log); MessageBox.Show(log, "提示"); } } else { MessageBox.Show("该环境尚未安装!", "提示"); } } private void toolStripMenuItem1_Click(object sender, EventArgs e) { var version = _method.Get_Version(); if (lbl_version.Text != "未安装") { try { System.Diagnostics.Process.Start($"http://{Const.config.ip}:{ihdis_port}23"); } catch (Exception ex) { var log = ex.ToString(); Const.write_log(log); MessageBox.Show(log, "提示"); } } else { MessageBox.Show("该环境尚未安装!", "提示"); } } #endregion #region 数据库比对工具 private void tsmi_DbCompare_Click(object sender, EventArgs e) { var version = _method.Get_Version(); if (lbl_version.Text != "未安装") { var installpath = Const.config.install_item_dir; var tmp = installpath.Split('/'); var server = Const.config.ip; var port = $"{ihdis_port}90"; var password = Const.config.db_passwd; var userid = "jlmedcompare"; #region 处理云数据库 if (Const.config.IsCloudDB) { var connectionString = Const.config.CloudDBConnectionString; var connectionString1 = connectionString.Split(';'); if(connectionString1.Length == 4) { server = connectionString1[0]; port = connectionString1[1]; userid = connectionString1[2]; password = connectionString1[3]; } } #endregion using (Frm_DBCompare_Step1 f = new Frm_DBCompare_Step1($"server = {server}; port = {port}; userid = {userid}; password = {password};database=hdis;sslmode=none;allowPublicKeyRetrieval=true;", _method.sSH)) { f.ShowDialog(); f.TopMost = true; } } else { MessageBox.Show("该环境尚未安装,请安装后在进行数据库比对!", "提示"); } } #endregion #region 定时备份 private void 定时备份ToolStripMenuItem_Click(object sender, EventArgs e) { Frm_Backup backup = new Frm_Backup(); backup.ShowDialog(); } #endregion #region 更新运维工具 private bool Update_Tools() { //版本号提示 ZipFile entry = new ZipFile(this.txt_filepath.Text); var ziptxt = entry.ZipFileComment; string[] sArray = Regex.Split(ziptxt, "ToolsVersion", RegexOptions.IgnoreCase); string version = ""; if (sArray.Length > 1) { version = sArray[0].Trim(); } var localversion = File.Exists("config/Version.ini") ? File.ReadAllText("config/Version.ini").Split('\n')[0].Replace("[", "").Replace("]", "").Replace("\r", "") : ""; if (!string.IsNullOrEmpty(version) && localversion != version) { MessageBox.Show("运维工具不是最新版本,请更新", "提示"); return true; } return false; } #endregion #region 切换服务器 private void 选择服务器ToolStripMenuItem_Click(object sender, EventArgs e) { try { ischeckselect = true; this.Close(); } catch (Exception ex) { var log = ex.ToString(); Const.write_log(log); MessageBox.Show(log, "提示"); } } #endregion #region 数据导出 /// /// 数据导出方法 /// /// /// private void DataExportToolStripMenuItem_Click(object sender, EventArgs e) { bool pathSelect = false; if (ExportView == null || ExportView.IsDisposed) { string filePath = string.Empty; #region 设置文件路径 using (FolderBrowserDialog path = new FolderBrowserDialog()) { if (path.ShowDialog() == DialogResult.OK) { /* * 如果文件存在则直接覆盖掉 */ if (System.IO.File.Exists($"{path.SelectedPath}\\hdis_{Const.config.ip.Replace(".", "_")}_{DateTime.Now.ToString("yyyy_MM_dd")}.sql")) { if (MessageBox.Show("文件已存在,是否覆盖?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) { return; } else { pathSelect = true; filePath = $"{path.SelectedPath}\\hdis_{Const.config.ip.Replace(".", "_")}_{DateTime.Now.ToString("yyyy_MM_dd")}.sql";//返回文件的完整路径 File.Delete(filePath); } } else { pathSelect = true; filePath = $"{path.SelectedPath}\\hdis_{Const.config.ip.Replace(".", "_")}_{DateTime.Now.ToString("yyyy_MM_dd")}.sql";//返回文件的完整路径 } } } #endregion if (pathSelect) { string install_dir = Const.config.install_dir; string install_dir_item = Const.config.install_item_dir; string user = Const.config.db_user; string password = Const.config.db_passwd; ExportView = new Frm_DataExport(install_dir, install_dir_item, _method, filePath, "root", password); ExportView.ShowDialog(); } } else { ExportView.ShowDialog(); } } private Frm_DataExport ExportView { set; get; } #endregion #region 模块管理 private void 模块管理ToolStripMenuItem_Click(object sender, EventArgs e) { using (Frm_Moudule frm_Moudule = new Frm_Moudule()) frm_Moudule.ShowDialog(); } #endregion #region 多套管理 private void 多套管理ToolStripMenuItem_Click(object sender, EventArgs e) { using (Frm_MultiEnvironment f = new Frm_MultiEnvironment()) { f.ShowDialog(); var mes = Const.MultiEnvs.Where(o => o.Ip == Const.config.ip).Select(o => o.Name).ToArray(); cmb_MultiEnv.Items.Clear(); this.cmb_MultiEnv.Items.AddRange(mes); if (mes.Any()) this.cmb_MultiEnv.Text = this.cmb_MultiEnv.Items[0].ToString(); } } #endregion #region 多环境切换 string ihdis_port = "600"; private void cmb_MultiEnv_SelectedIndexChanged(object sender, EventArgs e) { var item = Const.MultiEnvs.Where(o => o.Ip == Const.config.ip && o.Name == this.cmb_MultiEnv.Text).FirstOrDefault(); Const.config.install_item_dir = Const.config.install_dir + "/" + item.FileName; ihdis_port = item.DefaultPort; lbl_version.Text = _method.Get_Version(); if (lbl_version.Text != "未安装") { btn_update.Enabled = true; ; btn_install.Enabled = false; } else { btn_update.Enabled = false; btn_install.Enabled = true; } } #endregion private void HelpToolStripMenuItem_Click(object sender, EventArgs e) { } private void AboutToolStripMenuItem_Click(object sender, EventArgs e) { using (Form_About f = new Form_About()) { f.ShowDialog(); } } } }