1
0
mirror of https://github.com/akpaevj/OneSTools.TechLog.git synced 2025-07-12 22:40:19 +02:00

Добавлен наблюдатель каталога журнала

This commit is contained in:
akpaev.e
2021-11-13 01:48:31 +03:00
parent 6a49a7d672
commit fea68b13d5
7 changed files with 97 additions and 8 deletions

View File

@ -91,7 +91,7 @@ namespace OneSTools.TechLog.Exporter.ClickHouse.Properties {
/// Position Int64 Codec(DoubleDelta, LZ4) /// Position Int64 Codec(DoubleDelta, LZ4)
///) ///)
///engine = MergeTree() ///engine = MergeTree()
///ORDER BY (Folder). ///ORDER BY (Folder, File).
/// </summary> /// </summary>
internal static string CreateLastPositionsTable { internal static string CreateLastPositionsTable {
get { get {

View File

@ -143,6 +143,7 @@ DeadlockInfo String Codec(ZSTD),
Descr String Codec(ZSTD) Descr String Codec(ZSTD)
) )
engine = MergeTree() engine = MergeTree()
PARTITION BY toYYYYMMDD(DateTime)
ORDER BY (DateTime, EndTicks, EventName)</value> ORDER BY (DateTime, EndTicks, EventName)</value>
<comment>Создание таблицы для событий EXCP</comment> <comment>Создание таблицы для событий EXCP</comment>
</data> </data>
@ -154,7 +155,7 @@ ORDER BY (DateTime, EndTicks, EventName)</value>
Position Int64 Codec(DoubleDelta, LZ4) Position Int64 Codec(DoubleDelta, LZ4)
) )
engine = MergeTree() engine = MergeTree()
ORDER BY (Folder)</value> ORDER BY (Folder, File)</value>
<comment>Таблица для хранения позиций в прочитанных файлах *.log</comment> <comment>Таблица для хранения позиций в прочитанных файлах *.log</comment>
</data> </data>
</root> </root>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Worker"> <Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<UserSecretsId>dotnet-TechLogExporter-E9ACEC9F-C3D8-45CE-A879-75285C05F850</UserSecretsId> <UserSecretsId>dotnet-TechLogExporter-E9ACEC9F-C3D8-45CE-A879-75285C05F850</UserSecretsId>
<AssemblyName>OneSTools.TechLog.Exporter</AssemblyName> <AssemblyName>OneSTools.TechLog.Exporter</AssemblyName>
<RootNamespace>OneSTools.TechLog.Exporter</RootNamespace> <RootNamespace>OneSTools.TechLog.Exporter</RootNamespace>

View File

@ -10,7 +10,7 @@
"StorageType": 1 "StorageType": 1
}, },
"ClickHouse": { "ClickHouse": {
"ConnectionString": "Host=172.19.149.61;Port=8123;Database=techlog_all_rds;Username=default;password=;" "ConnectionString": "Host=172.21.238.42;Port=8123;Database=techlog_all_rds;Username=default;password=;"
}, },
"Reader": { "Reader": {
"LogFolder": "E:\\techlog_all_rds" "LogFolder": "E:\\techlog_all_rds"

View File

@ -9,7 +9,7 @@
<PackageProjectUrl>https://github.com/akpaevj/OneSTools.TechLog</PackageProjectUrl> <PackageProjectUrl>https://github.com/akpaevj/OneSTools.TechLog</PackageProjectUrl>
<Copyright>Akpaev Evgeny</Copyright> <Copyright>Akpaev Evgeny</Copyright>
<Description>Библиотека для чтения и парсинга технологического журнала 1С</Description> <Description>Библиотека для чтения и парсинга технологического журнала 1С</Description>
<Version>2.1.5</Version> <Version>2.1.6</Version>
<LangVersion>8.0</LangVersion> <LangVersion>8.0</LangVersion>
<PackageIcon>onestools_icon_nuget.png</PackageIcon> <PackageIcon>onestools_icon_nuget.png</PackageIcon>
<PackageLicenseExpression></PackageLicenseExpression> <PackageLicenseExpression></PackageLicenseExpression>
@ -28,11 +28,11 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<None Include="C:\Users\akpaev.e.ENTERPRISE\source\repos\OneSTools.TechLog\LICENSE"> <None Include="..\LICENSE">
<Pack>True</Pack> <Pack>True</Pack>
<PackagePath></PackagePath> <PackagePath></PackagePath>
</None> </None>
<None Include="C:\Users\akpaev.e.ENTERPRISE\source\repos\onestools_icon_nuget.png"> <None Include="..\..\onestools_icon_nuget.png">
<Pack>True</Pack> <Pack>True</Pack>
<PackagePath></PackagePath> <PackagePath></PackagePath>
</None> </None>

View File

@ -0,0 +1,87 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace OneSTools.TechLog
{
/// <summary>
/// Watch tech log folder and raise created/changed events
/// </summary>
class TechLogFolderWatcher: IDisposable
{
private FileSystemWatcher _watcher;
private bool disposedValue;
public string Folder { get; private set; }
public HashSet<string> ExceceptionPaths { get; private set; } = new HashSet<string>();
delegate void FileCreatedHandler(string path);
event FileCreatedHandler FileCreated;
delegate void FileChangedHandler(string path);
event FileChangedHandler FileChanged;
public TechLogFolderWatcher(string folder)
{
Folder = folder;
}
public void StartWatching()
{
_watcher = new FileSystemWatcher(Folder, "*.log")
{
NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.LastWrite
};
_watcher.IncludeSubdirectories = true;
_watcher.Changed += Watcher_Changed;
_watcher.Created += Watcher_Created;
_watcher.EnableRaisingEvents = true;
}
private void Watcher_Created(object sender, FileSystemEventArgs e)
=> FileCreated?.Invoke(e.FullPath);
private void Watcher_Changed(object sender, FileSystemEventArgs e)
{
if (ExceceptionPaths.Contains(e.FullPath))
return;
FileChanged?.Invoke(e.FullPath);
}
public void StopWatching()
{
_watcher.EnableRaisingEvents = false;
_watcher.Changed -= Watcher_Changed;
_watcher.Created -= Watcher_Created;
_watcher.Dispose();
_watcher = null;
}
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
ExceceptionPaths.Clear();
}
StopWatching();
disposedValue = true;
}
}
~TechLogFolderWatcher()
{
Dispose(disposing: false);
}
public void Dispose()
{
Dispose(disposing: true);
GC.SuppressFinalize(this);
}
}
}

View File

@ -7,7 +7,7 @@ using System.Text.RegularExpressions;
namespace OneSTools.TechLog namespace OneSTools.TechLog
{ {
public class TechLogItem { public class TechLogItem {
/// <summary> /// <summary>
/// Collection of key/value pairs /// Collection of key/value pairs
/// </summary> /// </summary>
@ -19,6 +19,7 @@ namespace OneSTools.TechLog
public DateTime DateTime { get; internal set; } public DateTime DateTime { get; internal set; }
public long StartTicks { get; internal set; } public long StartTicks { get; internal set; }
public long EndTicks { get; internal set; } public long EndTicks { get; internal set; }
/// <summary> /// <summary>