public void TestParseDRZipGroup1() { var filename = "./Resources/Zip1.zip"; using (var zipFile = ZipFile.OpenRead(filename)) { var zipEntries = zipFile.Entries; var drFiles = ComtradeHelper.ParseDRZipGroup(zipEntries); Assert.NotEmpty(drFiles); Assert.Equal(2, drFiles.Count()); foreach (var item in drFiles) { Assert.True(item.FileSize > 1); Assert.NotEmpty(item.FileName); Assert.Contains("010A0005", item.FileName); Assert.True(item.FileName.Length > 4); Assert.NotEmpty(item.FileData); Assert.True(item.FileData.Length > 1); Assert.Equal(ComtradeHelper.TryParseDRDate("04/04/2018,13:45:38.404284").DateTime, item.CreationTime); } } }
public void TestReadLinesCount() { var filename = "./Resources/Single1.CFG"; using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) Assert.Equal(73, ComtradeHelper.ReadLines(stream, Encoding.UTF8).ToList().Count); }
public void TestReadLinesEmpty() { var filename = "./Resources/EmptyFile.CFG"; using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) Assert.Empty(ComtradeHelper.ReadLines(stream, Encoding.UTF8).ToList()); }
public void TestParseZIPFolder() { var drFileList = new DirectoryInfo("./Resources/") .EnumerateFiles("*.zip", SearchOption.AllDirectories) .Where(x => x.Name.IsDownloadable()); var disturbanceRecordings = ComtradeHelper.ParseZipFilesCollection(drFileList, 1); Assert.NotEmpty(disturbanceRecordings); Assert.Equal(2, disturbanceRecordings.Count()); foreach (var dr in disturbanceRecordings) { Assert.NotEmpty(dr.Name); var drFiles = dr.DRFiles; Assert.NotEmpty(drFiles); Assert.True(drFiles.Count() > 1); foreach (var item in drFiles) { Assert.True(item.FileSize > 1); Assert.NotEmpty(item.FileName); Assert.True(item.FileName.Length > 4); Assert.NotEmpty(item.FileData); Assert.True(item.FileData.Length > 1); //Assert.Contains(dr.Name, item.FileName); Assert.Equal(dr.TriggerTime, item.CreationTime); } } }
public void TestReadLinesNotNull() { var filename = "./Resources/Single1.CFG"; using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) Assert.NotNull(ComtradeHelper.ReadLines(stream, Encoding.UTF8)); }
public void TestParseFilesGroup() { var filenames = new List <FileInfo>() { new FileInfo("./Resources/Single1.CFG"), new FileInfo("./Resources/Single1.DAT") }; var drFiles = ComtradeHelper.ParseDRFilesGroup(filenames); Assert.NotEmpty(drFiles); Assert.Equal(2, drFiles.Count()); foreach (var item in drFiles) { Assert.True(item.FileSize > 1); Assert.NotEmpty(item.FileName); Assert.Contains("Single1", item.FileName); Assert.True(item.FileName.Length > 4); Assert.NotEmpty(item.FileData); Assert.True(item.FileData.Length > 1); Assert.Equal(ComtradeHelper.TryParseDRDate("05/04/2018,13:45:38.404284").DateTime, item.CreationTime); } }
public void TestParseDRZipGroup2() { var filename = "./Resources/Zip2.zip"; using (var zipFile = ZipFile.OpenRead(filename)) { var zipEntries = zipFile.Entries; var drFiles = ComtradeHelper.ParseDRZipGroup(zipEntries); Assert.NotEmpty(drFiles); Assert.Equal(3, drFiles.Count()); foreach (var item in drFiles) { Assert.True(item.FileSize > 1); Assert.NotEmpty(item.FileName); Assert.Contains("Dist", item.FileName); Assert.True(item.FileName.Length > 4); Assert.NotEmpty(item.FileData); Assert.True(item.FileData.Length > 1); Assert.Equal(ComtradeHelper.TryParseDRDate("20/07/2016,10:09:14.760712").DateTime, item.CreationTime); } } }
public void TestGetTriggerDateTime() { var filename = "./Resources/Single1.CFG"; Assert.Equal(ComtradeHelper.TryParseDRDate("05/04/2018,13:45:38.404284").DateTime, ComtradeHelper.GetTriggerDateTime(filename)); Assert.Equal(5, ComtradeHelper.GetTriggerDateTime(filename).Day); Assert.Equal(4, ComtradeHelper.GetTriggerDateTime(filename).Month); }
public void TestParseZIPFolder() { var dir = @"C:\Users\admin\Desktop\Ordos DRs\Ordos\GIS 23KV\1\"; if (!Directory.Exists(dir)) { return; } var drFileList = new DirectoryInfo(dir) .EnumerateFiles("*.zip", SearchOption.AllDirectories) .Where(x => x.Name.IsDownloadable()); var disturbanceRecordings = ComtradeHelper.ParseZipFilesCollection(drFileList, 1); Assert.NotEmpty(disturbanceRecordings); foreach (var dr in disturbanceRecordings) { Assert.NotEmpty(dr.Name); var drFiles = dr.DRFiles; Assert.NotEmpty(drFiles); Assert.True(drFiles.Count() > 1); foreach (var item in drFiles) { Assert.True(item.FileSize > 1); Assert.NotEmpty(item.FileName); Assert.True(item.FileName.Length > 4); Assert.NotEmpty(item.FileData); Assert.True(item.FileData.Length > 1); //Assert.Contains(dr.Name, item.FileName); Assert.Equal(dr.TriggerTime, item.CreationTime); } } }
/// <summary> /// Connect and read IED Comtrade Files. /// </summary> /// <param name="device">Device to read</param> private static void ProcessDeviceComtradeFiles(Device device) { var iedConnection = new IedConnection { ConnectTimeout = 20000 }; try { Logger.Info($"{device} - Connecting to Device"); iedConnection.Connect(device.IPAddress); Logger.Info($"{device} - Connection Successful"); Logger.Info($"{device} - Get IED Files"); //Download a list of files in the IED: //Uses string.Empty as main root of the IED. var downloadableFileList = GetDownloadableFileList(iedConnection, device, string.Empty); Logger.Info($"{device} - {downloadableFileList.Count()} Files Found"); //Remove the files that have been already downloaded before: //It will filter the files that are not in the DB. var filteredDownloadableFileList = DatabaseService.FilterExistingFiles(device, downloadableFileList); Logger.Info($"{device} - {filteredDownloadableFileList.Count()} New Files Found"); if (filteredDownloadableFileList.Count() > 0) { Logger.Info($"{device} - Downloading Comtrade files"); DownloadComtradeFiles(iedConnection, device, filteredDownloadableFileList); Logger.Info($"{device} - Reading files"); //Using the recently donwloaded files: //(Each temporary folder is unique for each IED) var temporaryFolder = PathHelper.GetTemporaryDownloadFolder(device); var temporaryComtradeFiles = ComtradeHelper.ParseComtradeFiles(device, temporaryFolder); Logger.Info($"{device} - Saving files to the DB"); DatabaseService.StoreComtradeFilesToDatabase(device, temporaryComtradeFiles); DatabaseService.StoreIEDFilesToDatabase(device, filteredDownloadableFileList); Logger.Info($"{device} - Exporting files"); ExportService.ExportDisturbanceRecordings(device, temporaryComtradeFiles); Logger.Info($"{device} - Removing temporary files"); PathHelper.RemoveTemporaryFiles(device); } Logger.Info($"{device} - Disconnecting..."); //Close connection: iedConnection.Release(); } catch (IedConnectionException e) { Logger.Fatal($"Client Error: {e.GetIedClientError()}"); Logger.Fatal($"Error Code: {e.GetErrorCode()}"); Logger.Fatal($"IED Connection Exception: {e}"); } catch (Exception e) { Logger.Fatal(e); } finally { try { //libIEC61850: Dispose connection after use. iedConnection.Dispose(); } catch (IedConnectionException e) { Logger.Fatal($"Dispose Client Error: {e.GetIedClientError()}"); Logger.Fatal($"Dispose Error Code: {e.GetErrorCode()}"); Logger.Fatal($"Dispose IED Connection Exception: {e}"); } catch (Exception e) { Logger.Fatal(e); } Logger.Info($"{device} - Disconnected!"); } }
public void TestGetTriggerDateTimeEmpty() { var filename = "./Resources/EmptyFile.CFG"; Assert.Equal(DateTime.Now.ToShortDateString(), ComtradeHelper.GetTriggerDateTime(filename).ToShortDateString()); }
public void TestGetDRDateTimeCount() { var filename = "./Resources/Single1.CFG"; Assert.Equal(2, ComtradeHelper.GetDRDateTimes(filename).Count()); }
public void TestTestGetDRDateTimeEmpty() { var filename = "./Resources/EmptyFile.CFG"; Assert.Single(ComtradeHelper.GetDRDateTimes(filename)); }