private (StringBuilder Data, long EndPosition) ReadNextEventLogItemData(CancellationToken cancellationToken = default) { StringBuilder data = new StringBuilder(); long endPosition = 0; bool start = false; while (true) { if (cancellationToken.IsCancellationRequested) { break; } if (_lastPosition != 0) { SetPosition(_lastPosition); } var currentLine = streamReader.ReadLine(); if (currentLine is null) { _lastPosition = GetPosition(); break; } else { _lastPosition = 0; } // wait for the beginning of the event if (!start && currentLine.Length > 0 && currentLine[0] == '{') { start = true; } if (!start) { continue; } data.Append(currentLine); var blockEndIndex = BracketsFileParser.GetNodeEndIndex(data, 0); if (blockEndIndex != -1) { endPosition = GetPosition(); data.Remove(blockEndIndex + 1, data.Length - 1 - blockEndIndex); break; } } return(data, endPosition); }
/// <summary> /// Reads properties of "Enum" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadEnumsAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(4, 1, 1, 17)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <OneSEnum>(objectInfo.GetNode(1, 5, 1), objectGuid); Enums.Add(obj); } }
/// <summary> /// Reads properties of "Constant" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadConstantsAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(4, 1, 1, 3)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <Constant>(objectInfo.GetNode(1, 1, 1, 1), objectGuid); var typesNode = objectInfo.GetNode(1, 1, 1, 2); obj.Types = ReadTypesInfo(typesNode); Constants.Add(obj); } }
/// <summary> /// Reads properties of "Document journal" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadDocumentJournalsAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(4, 1, 1, 10)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <DocumentJournal>(objectInfo.GetNode(1, 3, 1), objectGuid); var requisitiesNode = objectInfo.GetNode(4); obj.Graphs = ReadRequisities(requisitiesNode, true); DocumentJournals.Add(obj); } }
/// <summary> /// Reads properties of "Calculation register" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadCalculationRegistersAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(6, 1, 4)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <CalculationRegister>(objectInfo.GetNode(1, 15, 1), objectGuid); var objectDetailsNodesCount = (int)objectInfo.GetNode(2); for (int i = 3; i < (3 + objectDetailsNodesCount); i++) { var objectDetailsNode = objectInfo.GetNode(i); var objectDetailsNodeGuid = (string)objectDetailsNode.GetNode(0); switch (objectDetailsNodeGuid) { case "1b304502-2216-440b-960f-60decd04bb5d": obj.Requisities = ReadRequisities(objectDetailsNode); break; case "b12fc850-8210-43c8-ae05-89567e698fbb": obj.Dimensions = ReadRequisities(objectDetailsNode); break; case "702b33ad-843e-41aa-8064-112cd38cc92c": obj.Resources = ReadRequisities(objectDetailsNode); break; case "274bf899-db0e-4df6-8ab5-67bf6371ec0b": obj.Recalculations = await ReadRecalculations(connection, objectDetailsNode, ct); break; default: continue; } } CalculationRegisters.Add(obj); } }
/// <summary> /// Reads properties of "Chart of accounts" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadChartsOfAccountsAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(5, 1, 3)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <ChartOfAccounts>(objectInfo.GetNode(1, 15, 1), objectGuid); var objectDetailsNodesCount = (int)objectInfo.GetNode(2); for (int i = 3; i < (3 + objectDetailsNodesCount); i++) { var objectDetailsNode = objectInfo.GetNode(i); var objectDetailsNodeGuid = (string)objectDetailsNode.GetNode(0); switch (objectDetailsNodeGuid) { case "6e65cbf5-daa8-4d8d-bef8-59723f4e5777": obj.Requisities = ReadRequisities(objectDetailsNode); break; case "4c7fec95-d1bd-4508-8a01-f1db090d9af8": obj.TabularSections = ReadTabularSections(objectDetailsNode); break; case "78bd1243-c4df-46c3-8138-e147465cb9a4": obj.AccountingFlags = ReadRequisities(objectDetailsNode); break; case "c70ca527-5042-4cad-a315-dcb4007e32a3": obj.ExtDimensionAccountingFlags = ReadRequisities(objectDetailsNode); break; default: continue; } } ChartsOfAccounts.Add(obj); } }
private async Task <List <Recalculation> > ReadRecalculations(DbConnection connection, BracketsFileNode node, CancellationToken ct) { var recalculations = new List <Recalculation>(); var count = (int)node.GetNode(1); for (int i = 0; i < count; i++) { var recalculationNode = node.GetNode(i + 2); var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, recalculationNode.Text, ct)); var recalculation = ReadMetadataObject <Recalculation>(objectInfo.GetNode(1, 7, 1)); recalculations.Add(recalculation); } return(recalculations); }
/// <summary> /// Reads properties of "Task" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadTasksAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(7, 1, 3)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <OneSTask>(objectInfo.GetNode(1, 1), objectGuid); var objectDetailsNodesCount = (int)objectInfo.GetNode(2); for (int i = 3; i < (3 + objectDetailsNodesCount); i++) { var objectDetailsNode = objectInfo.GetNode(i); var objectDetailsNodeGuid = (string)objectDetailsNode.GetNode(0); switch (objectDetailsNodeGuid) { case "8ddfb495-c5fc-46b9-bdc5-bcf58341bff0": obj.Requisities = ReadRequisities(objectDetailsNode); break; case "ee865d4b-a458-48a0-b38f-5a26898feeb0": obj.TabularSections = ReadTabularSections(objectDetailsNode); break; case "e97c0570-251c-4566-b0f1-10686820f143": obj.AddressingAttributes = ReadRequisities(objectDetailsNode); break; default: continue; } } Tasks.Add(obj); } }
/// <summary> /// Reads properties of "Accounting register" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadAccountingRegistersAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(5, 1, 4)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <AccountingRegister>(objectInfo.GetNode(1, 15, 1), objectGuid); var objectDetailsNodesCount = (int)objectInfo.GetNode(2); for (int i = 3; i < (3 + objectDetailsNodesCount); i++) { var objectDetailsNode = objectInfo.GetNode(i); var objectDetailsNodeGuid = (string)objectDetailsNode.GetNode(0); switch (objectDetailsNodeGuid) { case "9d28ee33-9c7e-4a1b-8f13-50aa9b36607b": obj.Requisities = ReadRequisities(objectDetailsNode); break; case "35b63b9d-0adf-4625-a047-10ae874c19a3": obj.Dimensions = ReadRequisities(objectDetailsNode); break; case "63405499-7491-4ce3-ac72-43433cbe4112": obj.Resources = ReadRequisities(objectDetailsNode); break; default: continue; } } AccountingRegisters.Add(obj); } }
/// <summary> /// Reads properties of "Accumulation register" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadAccumulationRegistersAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(4, 1, 1, 13)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <AccumulationRegister>(objectInfo.GetNode(1, 13, 1), objectGuid); var objectDetailsNodesCount = (int)objectInfo.GetNode(2); for (int i = 3; i < (3 + objectDetailsNodesCount); i++) { var objectDetailsNode = objectInfo.GetNode(i); var objectDetailsNodeGuid = (string)objectDetailsNode.GetNode(0); switch (objectDetailsNodeGuid) { case "b64d9a42-1642-11d6-a3c7-0050bae0a776": obj.Requisities = ReadRequisities(objectDetailsNode); break; case "b64d9a43-1642-11d6-a3c7-0050bae0a776": obj.Dimensions = ReadRequisities(objectDetailsNode); break; case "b64d9a41-1642-11d6-a3c7-0050bae0a776": obj.Resources = ReadRequisities(objectDetailsNode); break; default: continue; } } AccumulationRegisters.Add(obj); } }
/// <summary> /// Reads a configuration from the database /// </summary> /// <param name="dbConnection"></param> /// <returns></returns> public async static Task <Configuration> ReadFromDatabaseAsync(DbConnection connection, CancellationToken ct) { var config = new Configuration(); var root = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, "root", ct)); var conf = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, (string)root.GetNode(1), ct)); config.ReadConfigurationProperties(conf); await config.ReadExchangePlansAsync(connection, conf, ct); await config.ReadConstantsAsync(connection, conf, ct); await config.ReadCatalogsAsync(connection, conf, ct); await config.ReadDocumentsAsync(connection, conf, ct); await config.ReadDocumentJournalsAsync(connection, conf, ct); await config.ReadEnumsAsync(connection, conf, ct); await config.ReadChartsOfCharacteristicTypesAsync(connection, conf, ct); await config.ReadChartsOfAccountsAsync(connection, conf, ct); await config.ReadAccumulationRegistersAsync(connection, conf, ct); await config.ReadAccountingRegistersAsync(connection, conf, ct); await config.ReadCalculationRegistersAsync(connection, conf, ct); await config.ReadBusinessProcessesAsync(connection, conf, ct); await config.ReadTasksAsync(connection, conf, ct); return(config); }
/// <summary> /// Reads properties of "Business process" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadBusinessProcessesAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(7, 1, 4)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <BusinessProcess>(objectInfo.GetNode(1, 1), objectGuid); var objectDetailsNodesCount = (int)objectInfo.GetNode(2); for (int i = 3; i < (3 + objectDetailsNodesCount); i++) { var objectDetailsNode = objectInfo.GetNode(i); var objectDetailsNodeGuid = (string)objectDetailsNode.GetNode(0); switch (objectDetailsNodeGuid) { case "87c988de-ecbf-413b-87b0-b9516df05e28": obj.Requisities = ReadRequisities(objectDetailsNode); break; case "a3fe6537-d787-40f7-8a06-419d2f0c1cfd": obj.TabularSections = ReadTabularSections(objectDetailsNode); break; default: continue; } } BusinessProcesses.Add(obj); } }
/// <summary> /// Reads properties of "Chart of characteristic types" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadChartsOfCharacteristicTypesAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(4, 1, 1, 12)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <ChartOfCharacteristicTypes>(objectInfo.GetNode(1, 13, 1), objectGuid); var objectDetailsNodesCount = (int)objectInfo.GetNode(2); for (int i = 3; i < (3 + objectDetailsNodesCount); i++) { var objectDetailsNode = objectInfo.GetNode(i); var objectDetailsNodeGuid = (string)objectDetailsNode.GetNode(0); switch (objectDetailsNodeGuid) { case "31182525-9346-4595-81f8-6f91a72ebe06": obj.Requisities = ReadRequisities(objectDetailsNode); break; case "54e36536-7863-42fd-bea3-c5edd3122fdc": obj.TabularSections = ReadTabularSections(objectDetailsNode); break; default: continue; } } ChartsOfCharacteristicTypes.Add(obj); } }
/// <summary> /// Reads properties of "Document" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadDocumentsAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(4, 1, 1, 4)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <Document>(objectInfo.GetNode(1, 9, 1), objectGuid); var objectDetailsNodesCount = (int)objectInfo.GetNode(2); for (int i = 3; i < (3 + objectDetailsNodesCount); i++) { var objectDetailsNode = objectInfo.GetNode(i); var objectDetailsNodeGuid = (string)objectDetailsNode.GetNode(0); switch (objectDetailsNodeGuid) { case "45e46cbc-3e24-4165-8b7b-cc98a6f80211": obj.Requisities = ReadRequisities(objectDetailsNode); break; case "21c53e09-8950-4b5e-a6a0-1054f1bbc274": obj.TabularSections = ReadTabularSections(objectDetailsNode); break; default: continue; } } Documents.Add(obj); } }
/// <summary> /// Reads properties of "Catalog" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadCatalogsAsync(DbConnection connection, BracketsFileNode conf, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(conf.GetNode(4, 1, 1, 16)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <Catalog>(objectInfo.GetNode(1, 9, 1), objectGuid); var objectDetailsNodesCount = (int)objectInfo.GetNode(2); for (int i = 3; i < (3 + objectDetailsNodesCount); i++) { var objectDetailsNode = objectInfo.GetNode(i); var objectDetailsNodeGuid = (string)objectDetailsNode.GetNode(0); switch (objectDetailsNodeGuid) { case "cf4abea7-37b2-11d4-940f-008048da11f9": obj.Requisities = ReadRequisities(objectDetailsNode); break; case "932159f9-95b2-4e76-a8dd-8849fe5c5ded": obj.TabularSections = ReadTabularSections(objectDetailsNode); break; default: continue; } } Catalogs.Add(obj); } }
/// <summary> /// Reads properties of "Exchange plan" metadata objects /// </summary> /// <param name="connection"></param> /// <param name="config"></param> /// <param name="conf"></param> /// <param name="ct"></param> /// <returns></returns> private async Task ReadExchangePlansAsync(DbConnection connection, BracketsFileNode node, CancellationToken ct) { var objectGuids = GetMetadataObjectGuids(node.GetNode(3, 1, 19)); foreach (var objectGuid in objectGuids) { var objectInfo = BracketsFileParser.Parse(await GetStringConfigFileDataAsync(connection, objectGuid, ct)); var obj = ReadMetadataObject <ExchangePlan>(objectInfo.GetNode(1, 12), objectGuid); var objectDetailsNodesCount = (int)objectInfo.GetNode(2); for (int i = 3; i < (3 + objectDetailsNodesCount); i++) { var objectDetailsNode = objectInfo.GetNode(i); var objectDetailsNodeGuid = (string)objectDetailsNode.GetNode(0); switch (objectDetailsNodeGuid) { case "1a1b4fea-e093-470d-94ff-1d2f16cda2ab": obj.Requisities = ReadRequisities(objectDetailsNode); break; case "52293f4b-f98c-43ea-a80f-41047ae7ab58": obj.TabularSections = ReadTabularSections(objectDetailsNode); break; default: continue; } } ExchangePlans.Add(obj); } }
private T ParseEventLogItemData(StringBuilder eventLogItemData, long endPosition, CancellationToken cancellationToken = default) { var parsedData = BracketsFileParser.ParseBlock(eventLogItemData); var eventLogItem = new T { DateTime = _timeZone.ToUtc(DateTime.ParseExact((string)parsedData[0], "yyyyMMddHHmmss", CultureInfo.InvariantCulture)), TransactionStatus = GetTransactionPresentation((string)parsedData[1]), FileName = LgpFileName, EndPosition = endPosition, LgfEndPosition = _lgfReader.GetPosition() }; var transactionData = parsedData[2]; eventLogItem.TransactionNumber = Convert.ToInt64((string)transactionData[1], 16); var transactionDate = new DateTime().AddSeconds(Convert.ToInt64((string)transactionData[0], 16) / 10000); eventLogItem.TransactionDateTime = transactionDate == DateTime.MinValue ? transactionDate : _timeZone.ToUtc(transactionDate); var(Value, Uuid) = _lgfReader.GetReferencedObjectValue(ObjectType.Users, (int)parsedData[3], cancellationToken); eventLogItem.UserUuid = Uuid; eventLogItem.User = Value; eventLogItem.Computer = _lgfReader.GetObjectValue(ObjectType.Computers, (int)parsedData[4], cancellationToken); var application = _lgfReader.GetObjectValue(ObjectType.Applications, (int)parsedData[5], cancellationToken); eventLogItem.Application = GetApplicationPresentation(application); eventLogItem.Connection = (int)parsedData[6]; var ev = _lgfReader.GetObjectValue(ObjectType.Events, (int)parsedData[7], cancellationToken); eventLogItem.Event = GetEventPresentation(ev); var severity = (string)parsedData[8]; eventLogItem.Severity = GetSeverityPresentation(severity); eventLogItem.Comment = (string)parsedData[9]; (Value, Uuid) = _lgfReader.GetReferencedObjectValue(ObjectType.Metadata, (int)parsedData[10], cancellationToken); eventLogItem.MetadataUuid = Uuid; eventLogItem.Metadata = Value; eventLogItem.Data = GetData(parsedData[11]).Trim(); eventLogItem.DataPresentation = (string)parsedData[12]; eventLogItem.Server = _lgfReader.GetObjectValue(ObjectType.Servers, (int)parsedData[13], cancellationToken); var mainPort = _lgfReader.GetObjectValue(ObjectType.MainPorts, (int)parsedData[14], cancellationToken); if (mainPort != "") { eventLogItem.MainPort = int.Parse(mainPort); } var addPort = _lgfReader.GetObjectValue(ObjectType.AddPorts, (int)parsedData[15], cancellationToken); if (addPort != "") { eventLogItem.AddPort = int.Parse(addPort); } eventLogItem.Session = (int)parsedData[16]; return(eventLogItem); }