Commit a9fa39ab authored by Jeremy Bokobza's avatar Jeremy Bokobza Committed by GitHub

Merge pull request #81 from bokobza/master

Added logging to a rolling file
parents 99adb77d 92eb9c0a
......@@ -296,3 +296,4 @@ Thumbs.db
# DNX
project.lock.json
/Breeze/src/Breeze.Daemon/Wallets
/Breeze/src/Breeze.Daemon/Logs
......@@ -16,7 +16,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="1.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="1.0.3" />
<PackageReference Include="Serilog.Extensions.Logging.File" Version="1.0.1" />
<PackageReference Include="System.ValueTuple" Version="4.3.1" />
<PackageReference Include="Stratis.Bitcoin" Version="1.0.1.8-alpha" />
</ItemGroup>
......
......@@ -7,6 +7,7 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Breeze.Wallet.Notifications;
using Microsoft.Extensions.Logging;
using NBitcoin;
using Stratis.Bitcoin;
using Stratis.Bitcoin.Notifications;
......@@ -21,14 +22,16 @@ namespace Breeze.Wallet
private readonly Signals signals;
private readonly BlockNotification blockNotification;
private readonly CoinType coinType;
private readonly ILogger logger;
public Tracker(IWalletManager walletManager, ConcurrentChain chain, Signals signals, BlockNotification blockNotification, Network network)
public Tracker(ILoggerFactory loggerFactory, IWalletManager walletManager, ConcurrentChain chain, Signals signals, BlockNotification blockNotification, Network network)
{
this.walletManager = walletManager as WalletManager;
this.chain = chain;
this.signals = signals;
this.blockNotification = blockNotification;
this.coinType = (CoinType)network.Consensus.CoinType;
this.coinType = (CoinType)network.Consensus.CoinType;
this.logger = loggerFactory.CreateLogger(this.GetType().FullName);
}
/// <inheritdoc />
......@@ -44,7 +47,9 @@ namespace Breeze.Wallet
txSub.Subscribe();
// start syncing blocks
this.blockNotification.SyncFrom(this.chain.GetBlock(this.FindBestHeightForSyncing()).HashBlock);
var bestHeightForSyncing = this.FindBestHeightForSyncing();
this.SyncFrom(bestHeightForSyncing);
this.logger.LogInformation($"Tracker initialized. Syncing from {bestHeightForSyncing}.");
}
private int FindBestHeightForSyncing()
......@@ -75,6 +80,7 @@ namespace Breeze.Wallet
// wait until the chain is downloaded. We wait until a block is from an hour ago.
if (this.chain.IsDownloaded())
{
this.logger.LogInformation($"Chain downloaded. Tip height is {this.chain.Tip.Height}.");
cancellationTokenSource.Cancel();
}
......@@ -88,21 +94,15 @@ namespace Breeze.Wallet
public void SyncFrom(DateTime date)
{
int blockSyncStart = this.chain.GetHeightAtTime(date);
// start syncing blocks
this.SyncFrom(blockSyncStart);
}
/// <inheritdoc />
public void SyncFrom(int height)
{
this.blockNotification.SyncFrom(this.chain.GetBlock(height).HashBlock);
}
private bool BlocksSynced()
{
return this.walletManager.Wallets.All(w => w.AccountsRoot.Single(a => a.CoinType == this.coinType).LastBlockSyncedHeight == this.chain.Tip.Height);
this.blockNotification.SyncFrom(this.chain.GetBlock(height).HashBlock);
}
}
}
......@@ -4,6 +4,7 @@ using Microsoft.Extensions.DependencyInjection;
using Stratis.Bitcoin.Builder;
using Stratis.Bitcoin.Logging;
using Microsoft.Extensions.Logging;
using Serilog;
namespace Breeze.Wallet
{
......@@ -11,7 +12,7 @@ namespace Breeze.Wallet
{
private readonly ITracker tracker;
private readonly IWalletManager walletManager;
public WalletFeature(ITracker tracker, IWalletManager walletManager)
{
this.tracker = tracker;
......@@ -19,7 +20,7 @@ namespace Breeze.Wallet
}
public override void Start()
{
{
this.tracker.Initialize();
}
......@@ -39,12 +40,15 @@ namespace Breeze.Wallet
features
.AddFeature<WalletFeature>()
.FeatureServices(services =>
{
services.AddSingleton<ITracker, Tracker>();
services.AddSingleton<ILoggerFactory>(Logs.LoggerFactory);
services.AddSingleton<IWalletManager, WalletManager>();
services.AddSingleton<WalletController>();
});
{
var loggerFactory = Logs.LoggerFactory;
loggerFactory.AddFile("Logs/Breeze-{Date}.json", isJson: true, minimumLevel:LogLevel.Debug, fileSizeLimitBytes: 10000000);
services.AddSingleton<ITracker, Tracker>();
services.AddSingleton<ILoggerFactory>(loggerFactory);
services.AddSingleton<IWalletManager, WalletManager>();
services.AddSingleton<WalletController>();
});
});
return fullNodeBuilder;
......
......@@ -5,6 +5,7 @@ using System.Linq;
using System.Runtime.InteropServices;
using Breeze.Wallet.Helpers;
using Breeze.Wallet.Models;
using Microsoft.Extensions.Logging;
using NBitcoin;
using NBitcoin.DataEncoders;
using NBitcoin.Protocol;
......@@ -37,13 +38,16 @@ namespace Breeze.Wallet
private Dictionary<Script, HdAddress> keysLookup;
private readonly ILogger logger;
/// <summary>
/// Occurs when a transaction is found.
/// </summary>
public event EventHandler<TransactionFoundEventArgs> TransactionFound;
public WalletManager(ConnectionManager connectionManager, Network network, ConcurrentChain chain)
public WalletManager(ILoggerFactory loggerFactory, ConnectionManager connectionManager, Network network, ConcurrentChain chain)
{
this.logger = loggerFactory.CreateLogger(this.GetType().FullName);
this.Wallets = new List<Wallet>();
// find wallets and load them in memory
......@@ -447,7 +451,7 @@ namespace Breeze.Wallet
/// <inheritdoc />
public void ProcessBlock(int height, Block block)
{
Console.WriteLine($"block notification: height: {height}, block hash: {block.Header.GetHash()}, coin type: {this.coinType}");
this.logger.LogDebug($"block notification - height: {height}, hash: {block.Header.GetHash()}, coin: {this.coinType}");
foreach (Transaction transaction in block.Transactions)
{
......@@ -461,7 +465,7 @@ namespace Breeze.Wallet
/// <inheritdoc />
public void ProcessTransaction(Transaction transaction, int? blockHeight = null, Block block = null)
{
Console.WriteLine($"transaction notification: tx hash {transaction.GetHash()}, coin type: {this.coinType}");
this.logger.LogDebug($"transaction received - hash: {transaction.GetHash()}, coin: {this.coinType}");
// check the outputs
foreach (var pubKey in this.keysLookup.Keys)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment