using Microsoft.AspNetCore.Hosting;
using Newtonsoft.Json;
using Quartz.NET.Web.Constant;
using Quartz.NET.Web.Enum;
using Quartz.NET.Web.Extensions;
using Quartz.NET.Web.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Quartz.NET.Web.Utility
{
public class FileQuartz
{
private static string _rootPath { get; set; }
private static string _logPath { get; set; }
///
/// 创建作业所在根目录及日志文件夹
///
///
public static string CreateQuartzRootPath(IWebHostEnvironment env)
{
if (!string.IsNullOrEmpty(_rootPath))
return _rootPath;
_rootPath = $"{Directory.GetParent(env.ContentRootPath).FullName}\\{QuartzFileInfo.QuartzSettingsFolder}\\";
_rootPath = _rootPath.ReplacePath();
if (!Directory.Exists(_rootPath))
{
Directory.CreateDirectory(_rootPath);
}
_logPath = _rootPath + QuartzFileInfo.Logs + "\\";
_logPath = _logPath.ReplacePath();
//生成日志文件夹
if (!Directory.Exists(_logPath))
{
Directory.CreateDirectory(_logPath);
}
return _rootPath;
}
///
/// 初始化作业日志文件,以txt作为文件
///
///
public static void InitGroupJobFileLog(string groupJobName)
{
string jobFile = _logPath + groupJobName;
jobFile = jobFile.ReplacePath();
if (!File.Exists(jobFile))
{
File.Create(jobFile);
}
}
public static List GetJobRunLog(string taskName, string groupName, int page, int pageSize = 100)
{
string path = $"{_logPath}{groupName}\\{taskName}.txt";
List list = new List();
path = path.ReplacePath();
if (!File.Exists(path))
return list;
var logs = FileHelper.ReadPageLine(path, page, pageSize, true);
foreach (string item in logs)
{
string[] arr = item?.Split('_');
if (item == "" || arr == null || arr.Length == 0)
continue;
if (arr.Length != 3)
{
list.Add(new TaskLog() { Msg = item });
continue;
}
list.Add(new TaskLog() { BeginDate = arr[0], EndDate = arr[1], Msg = arr[2] });
}
return list.OrderByDescending(x => x.BeginDate).ToList();
}
public static void WriteJobConfig(List taskList)
{
string jobs = JsonConvert.SerializeObject(taskList);
//写入配置文件
FileHelper.WriteFile(_rootPath, QuartzFileInfo.JobConfigFileName, jobs);
}
public static void WriteStartLog(string content)
{
content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "," + content;
if (!content.EndsWith("\r\n"))
{
content += "\r\n";
}
FileHelper.WriteFile(FileQuartz.LogPath, "start.txt", content, true);
}
public static void WriteJobAction(JobAction jobAction, ITrigger trigger, string taskName, string groupName)
{
WriteJobAction(jobAction, taskName, groupName, trigger == null ? "未找到作业" : "OK");
}
public static void WriteJobAction(JobAction jobAction, string taskName, string groupName, string content = null)
{
content = $"{jobAction.ToString()} -- {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} --分组:{groupName},作业:{taskName},消息:{content ?? "OK"}\r\n";
FileHelper.WriteFile(FileQuartz.LogPath, "action.txt", content, true);
}
public static void WriteAccess(string content = null)
{
content = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}_{content}\r\n";
FileHelper.WriteFile(FileQuartz.LogPath, "access.txt", content, true);
}
public static string GetAccessLog(int pageSize=1)
{
string path = FileQuartz.LogPath + "access.txt";
path = path.ReplacePath();
if (!File.Exists(path))
return "没有找到目录";
return string.Join("
", FileHelper.ReadPageLine(path, pageSize, 5000, true).ToList());
}
public static string RootPath
{
get { return _rootPath; }
}
public static string LogPath
{
get { return _logPath; }
}
}
}