/*=========================*/ #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; }
/*=========================*/ #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); }