private string IssueAuthenticationToken(string username, string password) { byte[] buffer = new byte[9]; // Generate the selector for the token Random.GetBytes(buffer); string selector = Convert.ToBase64String(buffer); // Generate the validator for the token Random.GetBytes(buffer); string validator = Convert.ToBase64String(buffer); // Determine where the credential cache is located ConfigurationFile configFile = ConfigurationFile.Current; CategorizedSettingsElementCollection systemSettings = configFile.Settings["systemSettings"]; string configurationCachePath = systemSettings["ConfigurationCachePath"].Value; string credentialCachePath = Path.Combine(configurationCachePath, "CredentialCache.bin"); // Open the credential cache lock (s_credentialCacheLock) { using (FileBackedDictionary <string, Credential> credentialCache = new FileBackedDictionary <string, Credential>(credentialCachePath)) { // Clean out expired credentials before issuing a new one DateTime now = DateTime.UtcNow; List <string> expiredSelectors = credentialCache .Where(kvp => now >= kvp.Value.Expiration) .Select(kvp => kvp.Key) .ToList(); foreach (string expiredSelector in expiredSelectors) { credentialCache.Remove(expiredSelector); } credentialCache.Compact(); // Enter the new token into the credential cache credentialCache[selector] = new Credential { Validator = validator, Username = username, Password = password, Expiration = DateTime.UtcNow.AddDays(30.0D) }; } } return($"{selector}:{validator}"); }
/// <summary> /// Processes data not yet processed /// by this SandBox instance. /// </summary> private void ProcessLatestDataOperation() { string latestDataFile = FilePath.GetAbsolutePath(@"LatestData.bin"); int latestFileGroupID; FileInfoDataContext fileInfo; List <int> newFileGroups; if ((object)m_systemSettings == null) { ReloadSystemSettings(); } using (FileBackedDictionary <string, int> dictionary = new FileBackedDictionary <string, int>(latestDataFile)) using (DbAdapterContainer dbAdapterContainer = new DbAdapterContainer(m_systemSettings.DbConnectionString, m_systemSettings.DbTimeout)) { fileInfo = dbAdapterContainer.GetAdapter <FileInfoDataContext>(); do { dictionary.Compact(); if (!dictionary.TryGetValue("latestFileGroupID", out latestFileGroupID)) { latestFileGroupID = 0; } newFileGroups = fileInfo.FileGroups .Select(fileGroup => fileGroup.ID) .Where(id => id > latestFileGroupID) .Take(100) .OrderBy(id => id) .ToList(); foreach (int fileGroupID in newFileGroups) { MeterDataProcessor processor = new MeterDataProcessor(LoadSystemSettings()); processor.ProcessFileGroup(fileGroupID); dictionary["latestFileGroupID"] = fileGroupID; } }while (newFileGroups.Count > 0); } }
static eDNAGrafanaController() { CategorizedSettingsElementCollection systemSettings = ConfigurationFile.Open("openHistorian.exe.config").Settings["systemSettings"]; if (!systemSettings["eDNAGrafanaControllerEnabled", true]?.Value.ParseBoolean() ?? true) { return; } using (FileBackedDictionary <string, eDNADataSource> FileBackedDataSources = new FileBackedDictionary <string, eDNADataSource>(FileBackedDictionary)) { DataSources = new ConcurrentDictionary <string, eDNADataSource>(FileBackedDataSources); } string eDNAMetaData = systemSettings["eDNAMetaData"]?.Value ?? "*.*"; List <Task> tasks = new List <Task>(); foreach (string setting in eDNAMetaData.Split(',')) { string site = setting.Split('.')[0].ToUpper(); string service = setting.Split('.')[1].ToUpper(); if (!DataSources.ContainsKey($"{site}.{service}")) { DataSources.AddOrUpdate($"{site}.{service}", new eDNADataSource(site, service)); } tasks.Add(Task.Factory.StartNew(() => RefreshMetaData(site, service))); } Task.Factory.ContinueWhenAll(tasks.ToArray(), continuationTask => { using (FileBackedDictionary <string, eDNADataSource> FileBackedDataSources = new FileBackedDictionary <string, eDNADataSource>(FileBackedDictionary)) { foreach (KeyValuePair <string, eDNADataSource> kvp in DataSources) { FileBackedDataSources[kvp.Key] = kvp.Value; } FileBackedDataSources.Compact(); } }); }
public void CompactTest() { using (FileBackedDictionary <int, int> dictionary = new FileBackedDictionary <int, int>()) { for (int i = 0; i < 10000; i += 4) { dictionary.Add(i, 4); if (i % 400 == 0) { dictionary[i] = 400; } else if (i % 100 == 0) { dictionary.Remove(i); } } dictionary.Compact(); for (int i = 0; i < 10000; i++) { if (i % 400 == 0) { Assert.AreEqual(dictionary[i], 400); } else if (i % 100 == 0) { Assert.IsFalse(dictionary.ContainsKey(i), i.ToString()); } else if (i % 4 == 0) { Assert.AreEqual(dictionary[i], 4); } else { Assert.IsFalse(dictionary.ContainsKey(i), i.ToString()); } } } }
/// <summary> /// RefreshAllMetaData refreshes the metadata on command. /// </summary> public static void RefreshAllMetaData() { List <Task> tasks = new List <Task>(); foreach (KeyValuePair <string, eDNADataSource> kvp in DataSources) { string site = kvp.Key.Split('.')[0].ToUpper(); string service = kvp.Key.Split('.')[1].ToUpper(); tasks.Add(Task.Factory.StartNew(() => RefreshMetaData(site, service))); } Task.Factory.ContinueWhenAll(tasks.ToArray(), continuationTask => { using (FileBackedDictionary <string, eDNADataSource> FileBackedDataSources = new FileBackedDictionary <string, eDNADataSource>(FileBackedDictionary)) { foreach (KeyValuePair <string, eDNADataSource> kvp in DataSources) { FileBackedDataSources[kvp.Key] = kvp.Value; } FileBackedDataSources.Compact(); } }); }
/// <summary> /// Processes data not yet processed /// by this SandBox instance. /// </summary> private void ProcessLatestDataOperation() { string latestDataFile = FilePath.GetAbsolutePath(@"LatestData.bin"); List <int> newFileGroups; if ((object)m_systemSettings == null) { ReloadSystemSettings(); } using (FileBackedDictionary <string, int> dictionary = new FileBackedDictionary <string, int>(latestDataFile)) using (AdoDataConnection connection = new AdoDataConnection("systemSettings")) { do { dictionary.Compact(); if (!dictionary.TryGetValue("latestFileGroupID", out m_latestFileGroupID)) { m_latestFileGroupID = 0; } newFileGroups = (new TableOperations <FileGroup>(connection)).QueryRecordsWhere("ID > {0}", m_latestFileGroupID) .Select(fileGroup => fileGroup.ID) .Take(100) .OrderBy(id => id) .ToList(); foreach (int fileGroupID in newFileGroups) { MeterDataProcessor processor = new MeterDataProcessor(s_connectionString); processor.ProcessFileGroup(fileGroupID); dictionary["latestFileGroupID"] = fileGroupID; } }while (newFileGroups.Count > 0); } }
/// <summary> /// Processes data not yet processed /// by this SandBox instance. /// </summary> private void ProcessLatestDataOperation() { string latestDataFile = FilePath.GetAbsolutePath(@"LatestData.bin"); int latestFileGroupID; FileInfoDataContext fileInfo; List<int> newFileGroups; if ((object)m_systemSettings == null) ReloadSystemSettings(); using (FileBackedDictionary<string, int> dictionary = new FileBackedDictionary<string, int>(latestDataFile)) using (DbAdapterContainer dbAdapterContainer = new DbAdapterContainer(m_systemSettings.DbConnectionString, m_systemSettings.DbTimeout)) { fileInfo = dbAdapterContainer.GetAdapter<FileInfoDataContext>(); do { dictionary.Compact(); if (!dictionary.TryGetValue("latestFileGroupID", out latestFileGroupID)) latestFileGroupID = 0; newFileGroups = fileInfo.FileGroups .Select(fileGroup => fileGroup.ID) .Where(id => id > latestFileGroupID) .Take(100) .OrderBy(id => id) .ToList(); foreach (int fileGroupID in newFileGroups) { MeterDataProcessor processor = new MeterDataProcessor(LoadSystemSettings()); processor.ProcessFileGroup(fileGroupID); dictionary["latestFileGroupID"] = fileGroupID; } } while (newFileGroups.Count > 0); } }
public void CompactTest() { using (FileBackedDictionary<int, int> dictionary = new FileBackedDictionary<int, int>()) { for (int i = 0; i < 10000; i += 4) { dictionary.Add(i, 4); if (i % 400 == 0) dictionary[i] = 400; else if (i % 100 == 0) dictionary.Remove(i); } dictionary.Compact(); for (int i = 0; i < 10000; i++) { if (i % 400 == 0) Assert.AreEqual(dictionary[i], 400); else if (i % 100 == 0) Assert.IsFalse(dictionary.ContainsKey(i), i.ToString()); else if (i % 4 == 0) Assert.AreEqual(dictionary[i], 4); else Assert.IsFalse(dictionary.ContainsKey(i), i.ToString()); } } }