public override void Initialize()
{
base.Initialize();
//const string errorMessage = "{0} is missing from Settings - Example: instanceName=default; ArchiveDirectories={{c:\\Archive1\\;d:\\Backups2\\}}; dataChannel={{port=9591; interface=0.0.0.0}}";
Dictionary<string, string> settings = Settings;
string setting;
// Validate settings.
if (!settings.TryGetValue("instanceName", out m_instanceName) || string.IsNullOrWhiteSpace(m_instanceName))
m_instanceName = Name;
// Track instance in static dictionary
Instances[InstanceName] = this;
if (!settings.TryGetValue("WorkingDirectory", out setting) || string.IsNullOrEmpty(setting))
setting = "Archive";
WorkingDirectory = setting;
if (settings.TryGetValue("ArchiveDirectories", out setting))
ArchiveDirectories = setting;
if (settings.TryGetValue("AttachedPaths", out setting))
AttachedPaths = setting;
if (!settings.TryGetValue("DataChannel", out m_dataChannel))
m_dataChannel = DefaultDataChannel;
double targetFileSize;
if (!settings.TryGetValue("TargetFileSize", out setting) || !double.TryParse(setting, out targetFileSize))
targetFileSize = DefaultTargetFileSize;
if (targetFileSize < 0.1D || targetFileSize > SI2.Tera)
targetFileSize = DefaultTargetFileSize;
if (!settings.TryGetValue("MaximumArchiveDays", out setting) || !int.TryParse(setting, out m_maximumArchiveDays))
m_maximumArchiveDays = DefaultMaximumArchiveDays;
if (!settings.TryGetValue("DirectoryNamingMode", out setting) || !Enum.TryParse(setting, true, out m_directoryNamingMode))
DirectoryNamingMode = DefaultDirectoryNamingMode;
// Handle advanced settings - there are hidden but available from manual entry into connection string
int stagingCount, diskFlushInterval, cacheFlushInterval;
if (!settings.TryGetValue("StagingCount", out setting) || !int.TryParse(setting, out stagingCount))
stagingCount = 3;
if (!settings.TryGetValue("DiskFlushInterval", out setting) || !int.TryParse(setting, out diskFlushInterval))
diskFlushInterval = 10000;
if (!settings.TryGetValue("CacheFlushInterval", out setting) || !int.TryParse(setting, out cacheFlushInterval))
cacheFlushInterval = 100;
// Establish archive information for this historian instance
m_archiveInfo = new HistorianServerDatabaseConfig(InstanceName, WorkingDirectory, true);
if ((object)m_archiveDirectories != null)
m_archiveInfo.FinalWritePaths.AddRange(m_archiveDirectories);
if ((object)m_attachedPaths != null)
m_archiveInfo.ImportPaths.AddRange(m_attachedPaths);
m_archiveInfo.TargetFileSize = (long)(targetFileSize * SI.Giga);
m_archiveInfo.DirectoryMethod = DirectoryNamingMode;
m_archiveInfo.StagingCount = stagingCount;
m_archiveInfo.DiskFlushInterval = diskFlushInterval;
m_archiveInfo.CacheFlushInterval = cacheFlushInterval;
// Provide web service support
m_dataServices = new DataServices();
m_dataServices.AdapterCreated += DataServices_AdapterCreated;
m_dataServices.AdapterLoaded += DataServices_AdapterLoaded;
m_dataServices.AdapterUnloaded += DataServices_AdapterUnloaded;
m_dataServices.AdapterLoadException += AdapterLoader_AdapterLoadException;
// Provide archive replication support
m_replicationProviders = new ReplicationProviders();
m_replicationProviders.AdapterCreated += ReplicationProviders_AdapterCreated;
m_replicationProviders.AdapterLoaded += ReplicationProviders_AdapterLoaded;
m_replicationProviders.AdapterUnloaded += ReplicationProviders_AdapterUnloaded;
m_replicationProviders.AdapterLoadException += AdapterLoader_AdapterLoadException;
if (MaximumArchiveDays > 0)
{
m_dailyTimer = new Timer(Time.SecondsPerDay * 1000.0D);
m_dailyTimer.AutoReset = true;
m_dailyTimer.Elapsed += m_dailyTimer_Elapsed;
m_dailyTimer.Enabled = true;
}
}