Exemplo n.º 1
0
        /*=========================*/
        #endregion

        #region Constructors
        /*=========================*/

        public MetricsImportManager(long serviceInstanceID, MetricsImportManagerOptions options = null)
            : base(serviceInstanceID)
        {
            options = options ?? new MetricsImportManagerOptions();
            options.StagingConnectionString = options.StagingConnectionString ?? AppSettings.GetConnectionString(this, Consts.ConnectionStrings.StagingDatabase);
            options.SqlTransformCommand     = options.SqlTransformCommand ?? AppSettings.Get(this, Consts.AppSettings.SqlTransformCommand, throwException: false);
            options.SqlStageCommand         = options.SqlStageCommand ?? AppSettings.Get(this, Consts.AppSettings.SqlStageCommand, throwException: false);
            options.SqlRollbackCommand      = options.SqlRollbackCommand ?? AppSettings.Get(this, Consts.AppSettings.SqlRollbackCommand, throwException: false);

            this.Options = options;
        }
Exemplo n.º 2
0
        /*=========================*/
        #endregion

        public GenericMetricsImportManager(long serviceInstanceID, MetricsImportManagerOptions options = null)
            : base(serviceInstanceID, options)
        {
            bool hasMeasureOptions = this.Options.MeasureOptions != MeasureOptions.None;

            this.Options.MeasureOptions         = hasMeasureOptions ? this.Options.MeasureOptions :MeasureOptions.IsBackOffice;
            this.Options.MeasureOptionsOperator = hasMeasureOptions ? this.Options.MeasureOptionsOperator : OptionsOperator.Or;

            bool hasSegmentOptions = this.Options.SegmentOptions != SegmentOptions.None;

            this.Options.SegmentOptions         = hasSegmentOptions ? this.Options.SegmentOptions : Data.Objects.SegmentOptions.All;
            this.Options.SegmentOptionsOperator = hasSegmentOptions ? this.Options.SegmentOptionsOperator : OptionsOperator.And;
        }
 protected override MetricsImportManager CreateImportManager(long serviceInstanceID, MetricsImportManagerOptions options)
 {
     return(new AdMetricsImportManager(serviceInstanceID, options));
 }
        protected override Core.Services.ServiceOutcome DoPipelineWork()
        {
            // Setup/defaults/configuration/etc.
            // ------------------------------------------

            string checksumThreshold    = Instance.Configuration.Options[Consts.ConfigurationOptions.ChecksumTheshold];
            var    importManagerOptions = new MetricsImportManagerOptions()
            {
                SqlTransformCommand = Instance.Configuration.Options[Consts.AppSettings.SqlTransformCommand],
                SqlStageCommand     = Instance.Configuration.Options[Consts.AppSettings.SqlStageCommand],
                SqlRollbackCommand  = Instance.Configuration.Options[Consts.AppSettings.SqlRollbackCommand],
                ChecksumThreshold   = checksumThreshold == null ? 0.01 : double.Parse(checksumThreshold)
            };

            string fileName;

            if (!this.Instance.Configuration.Options.TryGetValue(Const.DeliveryServiceConfigurationOptions.DeliveryFileName, out fileName))
            {
                throw new ConfigurationException(String.Format("{0} is missing in the service configuration options.", Const.DeliveryServiceConfigurationOptions.DeliveryFileName));
            }

            DeliveryFile file = this.Delivery.Files[fileName];

            if (file == null)
            {
                throw new Exception(String.Format("Could not find delivery file '{0}' in the delivery.", fileName));
            }

            FileCompression compression;
            string          compressionOption;

            if (this.Instance.Configuration.Options.TryGetValue(Const.DeliveryServiceConfigurationOptions.Compression, out compressionOption))
            {
                if (!Enum.TryParse <FileCompression>(compressionOption, out compression))
                {
                    throw new ConfigurationException(String.Format("Invalid compression type '{0}'.", compressionOption));
                }
            }
            else
            {
                compression = FileCompression.None;
            }

            // Create format processor from configuration
            string adapterTypeName   = Instance.Configuration.GetOption(Consts.ConfigurationOptions.ReaderAdapterType);
            Type   readerAdapterType = Type.GetType(adapterTypeName, true);

            this.ReaderAdapter = (ReaderAdapter)Activator.CreateInstance(readerAdapterType);

            this.Mappings.OnFieldRequired = this.ReaderAdapter.GetField;

            LoadConfiguration();

            // ------------------------------------------

            using (var stream = file.OpenContents(compression: compression))
            {
                using (this.ReaderAdapter)
                {
                    this.ReaderAdapter.Init(stream, Instance.Configuration);

                    using (this.ImportManager = CreateImportManager(Instance.InstanceID, importManagerOptions))
                    {
                        this.ImportManager.BeginImport(this.Delivery);
                        bool readSuccess = false;
                        while (this.ReaderAdapter.Reader.Read())
                        {
                            readSuccess = true;
                            OnRead();
                        }

                        if (!readSuccess)
                        {
                            Edge.Core.Utilities.Log.Write("Could Not read data from file!, check file mapping and configuration", Core.Utilities.LogMessageType.Warning);
                        }

                        this.ImportManager.EndImport();
                    }
                }
            }

            return(Core.Services.ServiceOutcome.Success);
        }
 protected abstract MetricsImportManager CreateImportManager(long serviceInstanceID, MetricsImportManagerOptions options);
        protected override ServiceOutcome DoPipelineWork()
        {
            // ----------------
            // SETUP

            string checksumThreshold = Instance.Configuration.Options[Consts.ConfigurationOptions.ChecksumTheshold];

            MetricsImportManagerOptions options = new MetricsImportManagerOptions()
            {
                SqlTransformCommand = Instance.Configuration.Options[Consts.AppSettings.SqlTransformCommand],
                SqlStageCommand     = Instance.Configuration.Options[Consts.AppSettings.SqlStageCommand],
                SqlRollbackCommand  = Instance.Configuration.Options[Consts.AppSettings.SqlRollbackCommand],
                ChecksumThreshold   = checksumThreshold == null ? 0.01 : double.Parse(checksumThreshold)
            };

            string importManagerTypeName = Instance.Configuration.GetOption(Consts.ConfigurationOptions.ImportManagerType);
            Type   importManagerType     = Type.GetType(importManagerTypeName);

            var importManager = (MetricsImportManager)Activator.CreateInstance(importManagerType, this.Instance.InstanceID, options);

            ReportProgress(0.1);

            // ----------------
            // TICKETS

            // Only check tickets, don't check conflicts
            this.HandleConflicts(importManager, DeliveryConflictBehavior.Ignore, getBehaviorFromConfiguration: false);
            ReportProgress(0.2);

            // ----------------
            // TRANSFORM
            try
            {
                Log.Write("Transform: start", LogMessageType.Information);
                importManager.Transform(new Delivery[] { this.Delivery });
                Log.Write("Transform: end", LogMessageType.Information);
            }
            catch (Exception ex)
            {
                throw new Exception(String.Format("Delivery {0} failed during Transform.", this.Delivery.DeliveryID), ex);
            }

            ReportProgress(0.6);

            // ----------------
            // COMMIT
            bool success = false;

            do
            {
                try
                {
                    Log.Write("Staging: start", LogMessageType.Information);
                    importManager.Stage(new Delivery[] { this.Delivery });
                    Log.Write("Staging: end", LogMessageType.Information);
                    success = true;
                }
                catch (DeliveryConflictException dceex)
                {
                    Log.Write("Rollback: start", LogMessageType.Information);
                    importManager.RollbackOutputs(dceex.ConflictingOutputs);
                    Log.Write("Rollback: end", LogMessageType.Information);
                }
                catch (Exception ex)
                {
                    throw new Exception(String.Format("Delivery {0} failed during staging.", this.Delivery.DeliveryID), ex);
                }
            }while (!success);

            return(ServiceOutcome.Success);
        }