Skip to content

Commit a5eb2ea

Browse files
Adding extra logging to the log orchestrator
1 parent 9b86397 commit a5eb2ea

6 files changed

Lines changed: 99 additions & 3 deletions

File tree

src/Nethereum.BlockchainProcessing/LogProcessing/LogOrchestrator.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@
1111
using System.Numerics;
1212
using System.Threading;
1313
using System.Threading.Tasks;
14+
using System.Linq;
15+
16+
#if NETSTANDARD2_0_OR_GREATER || NETCOREAPP3_1_OR_GREATER || NET461_OR_GREATER || NET5_0_OR_GREATER
17+
using Microsoft.Extensions.Logging;
18+
#else
19+
using Nethereum.JsonRpc.Client;
20+
#endif
1421

1522
namespace Nethereum.BlockchainProcessing.LogProcessing
1623
{
@@ -52,17 +59,19 @@ public class LogOrchestrator : IBlockchainProcessingOrchestrator
5259

5360
private readonly IEnumerable<ProcessorHandler<FilterLog>> _logProcessors;
5461
private NewFilterInput _filterInput;
62+
private readonly ILogger _logger;
5563
private BlockRangeRequestStrategy _blockRangeRequestStrategy;
5664
public ILogProcessStrategy LogProcessStrategy { get; set; } = new LogProcessParallelStrategy();
5765

5866
protected IEthApiContractService EthApi { get; set; }
5967

6068
public LogOrchestrator(IEthApiContractService ethApi,
61-
IEnumerable<ProcessorHandler<FilterLog>> logProcessors, NewFilterInput filterInput = null, int defaultNumberOfBlocksPerRequest = 100, int retryWeight = 0)
69+
IEnumerable<ProcessorHandler<FilterLog>> logProcessors, NewFilterInput filterInput = null, int defaultNumberOfBlocksPerRequest = 100, int retryWeight = 0, ILogger logger = null)
6270
{
6371
EthApi = ethApi;
6472
_logProcessors = logProcessors;
6573
_filterInput = filterInput ?? new NewFilterInput();
74+
_logger = logger;
6675
_blockRangeRequestStrategy = new BlockRangeRequestStrategy(defaultNumberOfBlocksPerRequest, retryWeight);
6776
}
6877

@@ -80,6 +89,7 @@ public async Task<OrchestrationProgress> ProcessAsync(BigInteger fromNumber, Big
8089
nextBlockNumberFrom = progress.BlockNumberProcessTo.Value + 1;
8190
}
8291

92+
_logger?.LogInformation("Starting logs processing from block number: " + nextBlockNumberFrom.ToString());
8393
var getLogsResponse = await GetLogsAsync(progress, nextBlockNumberFrom, toNumber).ConfigureAwait(false);
8494

8595
if (getLogsResponse == null || cancellationToken.IsCancellationRequested) return progress; //allowing all the logs to be processed if not cancelled before hand
@@ -88,12 +98,14 @@ public async Task<OrchestrationProgress> ProcessAsync(BigInteger fromNumber, Big
8898

8999
if (logs != null)
90100
{
101+
_logger?.LogInformation("Total Logs found: " + logs.Count());
91102
logs = logs.Sort();
92103
await InvokeLogProcessorsAsync(logs).ConfigureAwait(false);
93104
}
94105
progress.BlockNumberProcessTo = getLogsResponse.Value.To;
95106
if (blockProgressRepository != null)
96107
{
108+
_logger?.LogInformation("Logs processed completed to block number: " + progress.BlockNumberProcessTo.Value.ToString());
97109
await blockProgressRepository.UpsertProgressAsync(progress.BlockNumberProcessTo.Value).ConfigureAwait(false);
98110
}
99111

src/Nethereum.BlockchainProcessing/Services/BlockchainLogProcessingService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ public BlockchainProcessor CreateProcessor(
283283
IBlockProgressRepository blockProgressRepository = null,
284284
ILogger log = null, int defaultNumberOfBlocksPerRequest = 100, int retryWeight = 0)
285285
{
286-
var orchestrator = new LogOrchestrator(_ethApiContractService, logProcessors, filter, defaultNumberOfBlocksPerRequest, retryWeight);
286+
var orchestrator = new LogOrchestrator(_ethApiContractService, logProcessors, filter, defaultNumberOfBlocksPerRequest, retryWeight, log);
287287

288288
var progressRepository = blockProgressRepository ??
289289
new InMemoryBlockchainProgressRepository();

src/Nethereum.Mud/TableRecord.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public override SchemaEncoded GetSchemaEncoded()
3232
return SchemaEncoder.GetSchemaEncoded<TKey, TValue>(ResourceIdEncoded);
3333
}
3434

35+
36+
3537

3638
}
3739
}

src/Nethereum.Mud/TableRepository/KeyUtils.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Nethereum.Hex.HexConvertors.Extensions;
2+
using Nethereum.Util;
23
using System.Collections.Generic;
34
using System.Linq;
45

@@ -9,7 +10,7 @@ public class KeyUtils
910
{
1011
public static string ConvertKeyToCombinedHex(List<byte[]> key)
1112
{
12-
return string.Join("", key.Select(k => k.ToHex()));
13+
return string.Join("", key.Select(k => k.PadTo32Bytes().ToHex()));
1314
}
1415

1516
public static List<byte[]> ConvertKeyFromCombinedHex(string key)

src/Nethereum.Mud/TableRepository/StoredRecord.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace Nethereum.Mud.TableRepository
88

99
public class StoredRecord: EncodedValues
1010
{
11+
public int RowId { get; set; }
1112
public byte[] TableIdBytes { get; set; }
1213
public byte[] KeyBytes { get; set; }
1314
public byte[] Key0Bytes { get; set; }

src/Nethereum.Mud/TableSchema.cs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using Nethereum.Mud.EncodingDecoding;
2+
using Newtonsoft.Json.Linq;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Text;
6+
7+
namespace Nethereum.Mud
8+
{
9+
public class TableSchema
10+
{
11+
public List<FieldInfo> SchemaValues { get; set; } = new List<FieldInfo>();
12+
public List<FieldInfo> SchemaKeys { get; set; } = new List<FieldInfo>();
13+
public TableSchema(string nameSpace, string tableName, bool isOffChainTable = false)
14+
{
15+
Namespace = nameSpace;
16+
Name = tableName;
17+
IsOffChain = isOffChainTable;
18+
}
19+
20+
public TableSchema(string name)
21+
{
22+
Namespace = String.Empty;
23+
Name = name;
24+
}
25+
26+
public TableSchema(byte[] resourceEncoded)
27+
{
28+
var decoded = ResourceEncoder.Decode(resourceEncoded);
29+
Namespace = decoded.Namespace;
30+
Name = decoded.Name;
31+
IsOffChain = decoded.IsOffchainTable();
32+
}
33+
34+
public string Namespace { get; protected set; }
35+
public string Name { get; protected set; }
36+
37+
public bool IsOffChain { get; protected set; }
38+
39+
private byte[] _resourceEncoded;
40+
public byte[] ResourceIdEncoded
41+
{
42+
get
43+
{
44+
if (_resourceEncoded == null)
45+
{
46+
if (IsOffChain)
47+
{
48+
_resourceEncoded = ResourceEncoder.EncodeOffchainTable(Namespace, GetTableNameTrimmedForResource());
49+
}
50+
else
51+
{
52+
_resourceEncoded = ResourceEncoder.EncodeTable(Namespace, GetTableNameTrimmedForResource());
53+
}
54+
55+
}
56+
return _resourceEncoded;
57+
}
58+
}
59+
60+
public string GetTableNameTrimmedForResource()
61+
{
62+
return ResourceEncoder.TrimNameAsValidSize(Name);
63+
}
64+
65+
66+
public List<FieldValue> GetFieldValues(EncodedTableRecord encodedTableRecord)
67+
{
68+
var fieldValues = new List<FieldValue>();
69+
70+
var keyValues = KeyEncoderDecoder.DecodeKeyToFieldValues(encodedTableRecord.Key, SchemaKeys);
71+
fieldValues.AddRange(keyValues);
72+
73+
var values = ValueEncoderDecoder.DecodeValuesToFieldValues(encodedTableRecord.EncodedValues, SchemaValues);
74+
fieldValues.AddRange(values);
75+
return fieldValues;
76+
77+
}
78+
79+
}
80+
}

0 commit comments

Comments
 (0)