/// <summary> /// Validate the endpoint configuration. 'Name' and 'Flat' properties are not allowed and there is only one configuration per endpoint allowed. /// </summary> private bool ValidateEndpointConfiguration(EndpointTelemetryConfigurationModel config) { if (config.ForEndpointUrl == null) { Logger.Fatal("Each object in the 'EndpointSpecific' array must have a property 'ForEndpointUrl'. Please change."); return(false); } if (_telemetryConfiguration.EndpointSpecific.Count(c => !string.IsNullOrEmpty(c.ForEndpointUrl) && c.ForEndpointUrl.Equals(config?.ForEndpointUrl, StringComparison.OrdinalIgnoreCase)) > 1) { Logger.Fatal($"The value '{config.ForEndpointUrl}' for property 'ForEndpointUrl' is only allowed to used once in the 'EndpointSpecific' array. Please change."); return(false); } if (config.EndpointUrl.Name != null || config.NodeId.Name != null || config.MonitoredItem.ApplicationUri.Name != null || config.MonitoredItem.DisplayName.Name != null || config.Value.Value.Name != null || config.Value.SourceTimestamp.Name != null || config.Value.StatusCode.Name != null || config.Value.Status.Name != null) { Logger.Fatal("The property 'Name' is not allowed in any object in the 'EndpointSpecific' array. Please change."); return(false); } if (config.MonitoredItem.Flat != null || config.Value.Flat != null) { Logger.Fatal("The property 'Flat' is not allowed in any object in the 'EndpointSpecific' array. Please change."); return(false); } return(true); }
/// <summary> /// Initialize the default configuration to be compatible with Connected factory Preconfigured Solution. /// </summary> private void InitializePublisherDefaultEndpointTelemetryConfiguration() { // create the default configuration _defaultEndpointTelemetryConfiguration = new EndpointTelemetryConfigurationModel(); // set defaults for 'Name' to be compatible with Connected factory _defaultEndpointTelemetryConfiguration.EndpointUrl.Name = EndpointUrlNameDefault; _defaultEndpointTelemetryConfiguration.NodeId.Name = NodeIdNameDefault; _defaultEndpointTelemetryConfiguration.ExpandedNodeId.Name = ExpandedNodeIdNameDefault; _defaultEndpointTelemetryConfiguration.MonitoredItem.ApplicationUri.Name = ApplicationUriNameDefault; _defaultEndpointTelemetryConfiguration.MonitoredItem.DisplayName.Name = DisplayNameNameDefault; _defaultEndpointTelemetryConfiguration.Value.Value.Name = ValueNameDefault; _defaultEndpointTelemetryConfiguration.Value.SourceTimestamp.Name = SourceTimestampNameDefault; _defaultEndpointTelemetryConfiguration.Value.StatusCode.Name = StatusCodeNameDefault; _defaultEndpointTelemetryConfiguration.Value.Status.Name = StatusCodeNameDefault; // set defaults for 'Publish' to be compatible with Connected factory _defaultEndpointTelemetryConfiguration.EndpointUrl.Publish = false; _defaultEndpointTelemetryConfiguration.NodeId.Publish = false; _defaultEndpointTelemetryConfiguration.ExpandedNodeId.Publish = false; _defaultEndpointTelemetryConfiguration.MonitoredItem.ApplicationUri.Publish = false; _defaultEndpointTelemetryConfiguration.MonitoredItem.DisplayName.Publish = true; _defaultEndpointTelemetryConfiguration.Value.Value.Publish = true; _defaultEndpointTelemetryConfiguration.Value.SourceTimestamp.Publish = true; _defaultEndpointTelemetryConfiguration.Value.StatusCode.Publish = false; _defaultEndpointTelemetryConfiguration.Value.Status.Publish = false; // set defaults for 'Flat' to be compatible with Connected factory _defaultEndpointTelemetryConfiguration.MonitoredItem.Flat = true; _defaultEndpointTelemetryConfiguration.Value.Flat = false; // 'Pattern' is set to null on creation which is whats default }
/// <summary> /// Update the endpoint specific telemetry configuration using settings from the default configuration. /// Only those settings are applied, which are not defined by the endpoint specific configuration. /// </summary> public void UpdateEndpointTelemetryConfiguration(EndpointTelemetryConfigurationModel config) { // process all properties, applying only those defaults which are not set in the endpoint specific config config.EndpointUrl.Name = config.EndpointUrl.Name ?? _defaultEndpointTelemetryConfiguration.EndpointUrl.Name; config.EndpointUrl.Publish = config.EndpointUrl.Publish ?? _defaultEndpointTelemetryConfiguration.EndpointUrl.Publish; config.EndpointUrl.Pattern = config.EndpointUrl.Pattern ?? _defaultEndpointTelemetryConfiguration.EndpointUrl.Pattern; config.NodeId.Name = config.NodeId.Name ?? _defaultEndpointTelemetryConfiguration.NodeId.Name; config.NodeId.Publish = config.NodeId.Publish ?? _defaultEndpointTelemetryConfiguration.NodeId.Publish; config.NodeId.Pattern = config.NodeId.Pattern ?? _defaultEndpointTelemetryConfiguration.NodeId.Pattern; config.ExpandedNodeId.Name = config.ExpandedNodeId.Name ?? _defaultEndpointTelemetryConfiguration.ExpandedNodeId.Name; config.ExpandedNodeId.Publish = config.ExpandedNodeId.Publish ?? _defaultEndpointTelemetryConfiguration.ExpandedNodeId.Publish; config.ExpandedNodeId.Pattern = config.ExpandedNodeId.Pattern ?? _defaultEndpointTelemetryConfiguration.ExpandedNodeId.Pattern; config.MonitoredItem.Flat = config.MonitoredItem.Flat ?? _defaultEndpointTelemetryConfiguration.MonitoredItem.Flat; config.MonitoredItem.ApplicationUri.Name = config.MonitoredItem.ApplicationUri.Name ?? _defaultEndpointTelemetryConfiguration.MonitoredItem.ApplicationUri.Name; config.MonitoredItem.ApplicationUri.Publish = config.MonitoredItem.ApplicationUri.Publish ?? _defaultEndpointTelemetryConfiguration.MonitoredItem.ApplicationUri.Publish; config.MonitoredItem.ApplicationUri.Pattern = config.MonitoredItem.ApplicationUri.Pattern ?? _defaultEndpointTelemetryConfiguration.MonitoredItem.ApplicationUri.Pattern; config.MonitoredItem.DisplayName.Name = config.MonitoredItem.DisplayName.Name ?? _defaultEndpointTelemetryConfiguration.MonitoredItem.DisplayName.Name; config.MonitoredItem.DisplayName.Publish = config.MonitoredItem.DisplayName.Publish ?? _defaultEndpointTelemetryConfiguration.MonitoredItem.DisplayName.Publish; config.MonitoredItem.DisplayName.Pattern = config.MonitoredItem.DisplayName.Pattern ?? _defaultEndpointTelemetryConfiguration.MonitoredItem.DisplayName.Pattern; config.Value.Flat = config.Value.Flat ?? _defaultEndpointTelemetryConfiguration.Value.Flat; config.Value.Value.Name = config.Value.Value.Name ?? _defaultEndpointTelemetryConfiguration.Value.Value.Name; config.Value.Value.Publish = config.Value.Value.Publish ?? _defaultEndpointTelemetryConfiguration.Value.Value.Publish; config.Value.Value.Pattern = config.Value.Value.Pattern ?? _defaultEndpointTelemetryConfiguration.Value.Value.Pattern; config.Value.SourceTimestamp.Name = config.Value.SourceTimestamp.Name ?? _defaultEndpointTelemetryConfiguration.Value.SourceTimestamp.Name; config.Value.SourceTimestamp.Publish = config.Value.SourceTimestamp.Publish ?? _defaultEndpointTelemetryConfiguration.Value.SourceTimestamp.Publish; config.Value.SourceTimestamp.Pattern = config.Value.SourceTimestamp.Pattern ?? _defaultEndpointTelemetryConfiguration.Value.SourceTimestamp.Pattern; config.Value.StatusCode.Name = config.Value.StatusCode.Name ?? _defaultEndpointTelemetryConfiguration.Value.StatusCode.Name; config.Value.StatusCode.Publish = config.Value.StatusCode.Publish ?? _defaultEndpointTelemetryConfiguration.Value.StatusCode.Publish; config.Value.StatusCode.Pattern = config.Value.StatusCode.Pattern ?? _defaultEndpointTelemetryConfiguration.Value.StatusCode.Pattern; config.Value.Status.Name = config.Value.Status.Name ?? _defaultEndpointTelemetryConfiguration.Value.Status.Name; config.Value.Status.Publish = config.Value.Status.Publish ?? _defaultEndpointTelemetryConfiguration.Value.Status.Publish; config.Value.Status.Pattern = config.Value.Status.Pattern ?? _defaultEndpointTelemetryConfiguration.Value.Status.Pattern; }