Example #1
0
        public virtual async Task <ISnapshot> CreateSnapshotAsync(ISnapshot snapshot)
        {
            Argument.IsNotNull(() => snapshot);

            Log.Info($"Creating snapshot '{snapshot}'");

            await SnapshotCreatingAsync.SafeInvokeAsync(this, new SnapshotEventArgs(snapshot));

            var providers = GetProviders();

            foreach (var provider in providers)
            {
                await provider.CreatingSnapshotAsync(snapshot);
            }

            foreach (var provider in providers)
            {
                Log.Debug($"Creating data for snapshot '{snapshot}' using provider '{provider}'");

                var names = provider.GetNames();

                foreach (var name in names)
                {
                    Log.Debug($"Creating data for snapshot '{snapshot}' using provider '{provider}::{name}'");

                    byte[] providerData;

                    using (var memoryStream = new MemoryStream())
                    {
                        await provider.StoreDataToSnapshotAsync(name, memoryStream);

                        providerData = memoryStream.ToArray();
                    }

                    snapshot.SetData(name, providerData);
                }
            }

            foreach (var provider in providers)
            {
                await provider.CreatedSnapshotAsync(snapshot);
            }

            SnapshotCreated.SafeInvoke(this, () => new SnapshotEventArgs(snapshot));

            Log.Info($"Created snapshot '{snapshot}'");

            return(snapshot);
        }