/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider paramProvider) { // ZipFile довольно глупый и если будет создавать в архив в тойже директории которую архивирует, он свалится. // Поэтому сперва моздаем временный файл var tempFile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), System.IO.Path.GetRandomFileName()); var fromPath = paramProvider.Parse(_from).First(); ZipFile.CreateFromDirectory(fromPath, tempFile); if (_deleteAfterArchive) { var directory = System.IO.Path.GetDirectoryName(fromPath); var wildcard = System.IO.Path.GetFileName(fromPath); foreach (var fn in Directory.GetFiles(directory, wildcard, SearchOption.TopDirectoryOnly)) { System.IO.File.Delete(fn); } } var destination = paramProvider.Parse(_to).First(); if (File.Exists(destination)) { File.Delete(destination); } File.Move(tempFile, paramProvider.Parse(_to).First()); }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { if (!string.IsNullOrEmpty(_value)) { parameters.AddParameter(_key, parameters.Parse(_value).First()); } if (!string.IsNullOrEmpty(_filePath)) { var filePath = parameters.Parse(_filePath).First(); if (File.Exists(filePath)) { if (_takeLines == 0) { _value = string.Join("\n", File.ReadAllLines(filePath).Skip(_skipLines)); } else { _value = string.Join("\n", File.ReadAllLines(filePath).Skip(_skipLines).Take(_takeLines)); } parameters.AddParameter(_key, _value); } else { Application.Log(LogLevel.Error, string.Format("File {0} not found.", filePath)); } } }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider paramProvider) { //TODO: Проверки. var from = paramProvider.Parse(_from).First(); var to = paramProvider.Parse(_to).First(); ZipFile.ExtractToDirectory(from, to); if (_deleteAfterExtract) { File.Delete(from); } }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { var types = new TypeRegistry(); types.RegisterDefaultTypes(); types.RegisterType("CultureInfo", typeof(CultureInfo)); types.RegisterSymbol("fromDate", parameters._fromDate); types.RegisterSymbol("toDate", parameters._toDate); var expression = new CompiledExpression(parameters.Parse(_expression).First()); expression.TypeRegistry = types; parameters.AddParameter(parameters.Parse(_outputParam).First(), expression.Eval().ToString()); }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { using (SmtpClient SmtpServer = new SmtpClient(parameters.Parse(_server).First(), int.Parse(parameters.Parse(_port).First()))) { using (MailMessage mail = new MailMessage()) { mail.From = new MailAddress(parameters.Parse(_from).First()); foreach (var mailAddress in parameters.Parse(_to).First().Split(';')) { if (!string.IsNullOrWhiteSpace(mailAddress)) { mail.To.Add(mailAddress); } } if (_cc != null) { var cc = parameters.Parse(_cc).First(); if (!string.IsNullOrWhiteSpace(cc)) { foreach (var mailAddress in cc.Split(';')) { if (!string.IsNullOrWhiteSpace(mailAddress)) { mail.CC.Add(mailAddress); } } } } mail.Subject = parameters.Parse(_subject).First(); mail.Body = parameters.Parse(_body).First(); mail.IsBodyHtml = true; // Добавление вложений if (!string.IsNullOrEmpty(_attachment)) { System.Net.Mail.Attachment attachment; attachment = new System.Net.Mail.Attachment(parameters.Parse(_attachment).First()); mail.Attachments.Add(attachment); } SmtpServer.EnableSsl = Boolean.Parse(parameters.Parse(_useSSL).First()); SmtpServer.UseDefaultCredentials = false; SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network; if (_server.ToLower(CultureInfo.InvariantCulture).Contains("gmail.com")) { SmtpServer.TargetName = "STARTTLS/smtp.gmail.com"; } SmtpServer.Credentials = new System.Net.NetworkCredential(parameters.Parse(_user).First(), parameters.Parse(_password).First()); SmtpServer.Send(mail); } } }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { var enc = String.IsNullOrEmpty(_fileEncoding) ? System.Text.Encoding.UTF8 : System.Text.Encoding.GetEncoding(_fileEncoding); _filePath = parameters.Parse(_filePath).First(); File.WriteAllText(_filePath, parameters.GetParameters()[_key], enc); }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.FileName = "cmd.exe"; startInfo.Arguments = "/c " + parameters.Parse(_arguments).First() + " exit "; Process.Start(startInfo).WaitForExit(); Application.Log(LogLevel.Informational, "{0} {1}", startInfo.FileName, startInfo.Arguments); }
/// <summary> /// Создание задачи из XML-определения /// </summary> /// <param name="declaration">XML-определение</param> /// <returns></returns> public void Run(ParameterProvider paramProvider) { var param = CreateLogParserParams(paramProvider.GetParameters()); var queryFile = paramProvider.Parse(_queryFile).First(); string headerParam = null; if ("TSV".Equals(_inputFormat, StringComparison.InvariantCultureIgnoreCase)) { headerParam = string.Format("-headerRow:{0}", _headerRow ? "on" : "off"); } var args = String.Format("-i:{3} file:{0}?{1} {2} -o:\"{4}\" {5}", queryFile, param, headerParam, _inputFormat, _outputFormat, _otherParams); Application.Log(LogLevel.Informational, args); var cmd = new ProcessStartInfo(@"Binaries\LogParser\LogParser.exe", args); cmd.UseShellExecute = false; Process.Start(cmd).WaitForExit(); }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { _filter = parameters.Parse(_filter).First(); Application.Log(LogLevel.Informational, "Обработка удаления: {0}", _filter); var directory = Path.GetDirectoryName(_filter); var wildcard = Path.GetFileName(_filter); if (string.IsNullOrEmpty(wildcard)) { wildcard = "*.*"; } foreach (var fn in Directory.GetFiles(directory, wildcard, SearchOption.TopDirectoryOnly)) { Application.Log(LogLevel.Informational, "Удаление файла {0}", fn); File.Delete(fn); } if (string.IsNullOrEmpty(Path.GetFileName(_filter))) { Application.Log(LogLevel.Informational, "Удаление папки {0}", directory); Directory.Delete(directory); } }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { var types = new TypeRegistry(); types.RegisterDefaultTypes(); types.RegisterType("CultureInfo", typeof(CultureInfo)); types.RegisterSymbol("fromDate", parameters._fromDate); types.RegisterSymbol("toDate", parameters._toDate); var expression = new CompiledExpression(parameters.Parse(_expression).First()); expression.TypeRegistry = types; if ((bool)expression.Eval()) { foreach (var task in _tasks) { Application.Log(LogLevel.Debug, " Выполнение задачи '{0}'", task.GetType().Name); task.Run(parameters); Application.Log(LogLevel.Debug, " выполнено"); } } }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { // TODO: Итерировать источник вместе var destination = parameters.Parse(_destination).First(); var files = new List <string>(); foreach (var _path in parameters.Parse(_source)) { if (File.Exists(_path)) { files.Add(_path); } else if (Directory.Exists(_path)) { files.AddRange(Directory.GetFiles(_path)); } else { var dir = Path.GetDirectoryName(_path); var dirMask = ""; var fileMask = Path.GetFileName(_path); Application.Log(LogLevel.Debug, "dir: {0} dirMask: {1} fileMask:{2}", dir, dirMask, fileMask); if (dir.Contains('*') || dir.Contains('?')) { dir = Path.GetPathRoot(_path); dirMask = _path.Replace(dir + '\\', ""); dirMask = dirMask.Replace(fileMask, ""); if (dirMask.EndsWith("\\")) { dirMask = dirMask.Substring(0, dirMask.Length - 1); } if (dirMask.EndsWith("//")) { dirMask = dirMask.Substring(0, dirMask.Length - 1); } } if (string.IsNullOrEmpty(dirMask)) { files.AddRange(Directory.GetFiles(dir, fileMask, _withSubFolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)); } else { foreach (var directory in Directory.GetDirectories(dir, dirMask)) { files.AddRange(Directory.GetFiles(directory, fileMask, _withSubFolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)); } } } } //Если указана папка, то копируем пофайлово if (string.IsNullOrEmpty(Path.GetExtension(destination))) { if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } foreach (var file in files) { Application.Log(LogLevel.Debug, "Копирование файла: {0}", file); File.Copy(file, Path.Combine(destination, Path.GetFileName(file)), true); } } else { Application.Log(LogLevel.Debug, "GetDirectoryName: {0}", Path.GetDirectoryName(destination)); if (!Directory.Exists(Path.GetDirectoryName(destination))) { Directory.CreateDirectory(Path.GetDirectoryName(destination)); } using (var destStream = File.Create(destination)) { foreach (var file in files) { Application.Log(LogLevel.Debug, "Копирование файла: {0}", file); // TODO: Указать размер буфера using (var sourceStream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) sourceStream.CopyTo(destStream); } } } }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { Application.Log(LogLevel.Informational, parameters.Parse(_value).First()); }
/// <summary> /// Выполнение задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { var report = new List <ReportItem>(); var reportPath = parameters.Parse(_topPath).First(); //Прекратить обработку, если файл не найден if (!File.Exists(reportPath)) { return; } var enc = String.IsNullOrEmpty(_encoding) ? System.Text.Encoding.UTF8 : System.Text.Encoding.GetEncoding(_encoding); using (var reader = new StreamReader(reportPath, enc)) { string line = null; while ((line = reader.ReadLine()) != null) { var d = line.Split('\t'); var hits = 0; if (d.Length > 1 && !string.IsNullOrEmpty(d[0]) && int.TryParse(d[1], out hits)) { report.Add(new ReportItem { Message = d[0], Hits = hits }); } } } // Настройка параметров сравнения. Определить эмпирически List <FuzzyStringComparisonOptions> options = new List <FuzzyStringComparisonOptions>(); options.Add(FuzzyStringComparisonOptions.UseHammingDistance); options.Add(FuzzyStringComparisonOptions.UseJaccardDistance); options.Add(FuzzyStringComparisonOptions.UseLongestCommonSubsequence); options.Add(FuzzyStringComparisonOptions.UseLongestCommonSubstring); options.Add(FuzzyStringComparisonOptions.UseOverlapCoefficient); options.Add(FuzzyStringComparisonOptions.UseRatcliffObershelpSimilarity); options.Add(FuzzyStringComparisonOptions.UseSorensenDiceDistance); options.Add(FuzzyStringComparisonOptions.UseTanimotoCoefficient); options.Add(FuzzyStringComparisonOptions.CaseSensitive); // Агрегация списка for (var i = 0; i < report.Count; i++) { var currentItem = report[i]; var j = i + 1; while (j < report.Count) { var lookupItem = report[j]; // Вероятностное сравнение if (currentItem.Message.ApproximatelyEquals(lookupItem.Message, options, FuzzyStringComparisonTolerance.Normal)) { currentItem.Hits = currentItem.Hits + lookupItem.Hits; report.RemoveAt(j); } else { j = j + 1; } } } // Запись итогового списка //TODO:ТОП и путь в параметры) File.WriteAllLines(reportPath, report.OrderByDescending(x => x.Hits).Take(20).Select(x => string.Format("{0}\t{1}", x.Message, x.Hits))); }
/// <summary> /// Запуск задачи /// </summary> /// <param name="parameters">Провайдер параметров</param> public void Run(ParameterProvider parameters) { System.Threading.Thread.Sleep(5000); FormatCompiler compiler = new FormatCompiler(); if (string.IsNullOrWhiteSpace(_template) && !string.IsNullOrWhiteSpace(_templateFile)) { _template = File.ReadAllText(parameters.Parse(_templateFile).First()); } //Компилция шаблона Generator generator = compiler.Compile(_template); //В шаблоне можно использовать все параметры, заданные в конфигурации. var _templateParams = new Dictionary <string, object>(); foreach (var param in parameters.GetParameters()) { _templateParams.Add(param.Key, param.Value); } foreach (var param in _paramsDescription) { object value = null; var filePath = parameters.Parse(param.FilePath).First(); var enc = String.IsNullOrEmpty(param.Encoding) ? System.Text.Encoding.UTF8 : System.Text.Encoding.GetEncoding(param.Encoding); if (File.Exists(filePath)) { switch (param.Mode) { case "text": if (param.HasHeaders) { value = string.Join("\n", File.ReadAllLines(filePath).Skip(1)); } else { value = File.ReadAllText(filePath, enc); } break; case "csv": value = File.ReadAllLines(filePath, enc).Skip(param.HasHeaders ? 1 : 0).Select(x => x.Split(';')).ToList(); break; case "tsv": value = File.ReadAllLines(filePath, enc).Skip(param.HasHeaders ? 1 : 0).Select(x => x.Split('\t')).ToList(); break; default: value = File.ReadAllText(filePath, enc); break; } } _templateParams.Add(param.Name, value); } parameters.AddParameter(_outputParam, generator.Render(_templateParams)); }