/// <summary> /// Gets the list of retention policies present in a DB /// </summary> /// <param name="dbName">Name of the database</param> /// <returns>List of InfluxRetentionPolicy objects</returns> public async Task <List <IInfluxRetentionPolicy> > GetRetentionPoliciesAsync(string dbName) { var rawpolicies = await QueryMultiSeriesAsync(dbName, "show retention policies on " + dbName); var policies = new List <IInfluxRetentionPolicy>(); foreach (var policy in rawpolicies.FirstOrDefault()?.Entries) { var pol = new InfluxRetentionPolicy() { DBName = dbName, Name = policy.Name, Duration = StringHelper.ParseDuration(policy.Duration), IsDefault = (policy.Default == "true"), ReplicaN = int.Parse(policy.ReplicaN), Saved = true }; try { //supported from Influx 12 onwards pol.ShardDuration = StringHelper.ParseDuration(policy.ShardGroupDuration); } catch (Exception) { } policies.Add(pol); } return(policies); }
/// <summary> /// Gets the list of Continuous Queries currently in efect /// </summary> /// <returns>List of InfluxContinuousQuery objects</returns> public async Task <List <IInfluxContinuousQuery> > GetContinuousQueriesAsync() { var cqPattern = new Regex(@"^CREATE CONTINUOUS QUERY (\S*) ON (\S*) (RESAMPLE (EVERY (\d\S)*)? ?(FOR (\d\S)*)?)? ?BEGIN ([\s\S]*GROUP BY time\((\d\S)\)[\s\S]*) END", RegexOptions.IgnoreCase | RegexOptions.Compiled, TimeSpan.FromSeconds(10)); //Show Continous Queries runs at a global scope, not just for a given DB. var rawCQList = await QueryMultiSeriesAsync(null, "SHOW CONTINUOUS QUERIES"); var queries = new List <IInfluxContinuousQuery>(); foreach (var dbEntry in rawCQList.Where(cq => cq.HasEntries == true)) { foreach (var rawCQ in dbEntry.Entries) { var cq = new InfluxContinuousQuery() { DBName = dbEntry.SeriesName, Name = rawCQ.Name, Saved = true }; Match queryParts; try { queryParts = cqPattern.Match(rawCQ.Query); cq.ResampleFrequency = StringHelper.ParseDuration(queryParts.Groups[5].ToString()); cq.ResampleDuration = StringHelper.ParseDuration(queryParts.Groups[7].ToString()); cq.Query = queryParts.Groups[8].ToString(); cq.GroupByInterval = StringHelper.ParseDuration(queryParts.Groups[9].ToString()); } #pragma warning disable CS0168 // The variable 'e' is declared but never used catch (Exception e) #pragma warning restore CS0168 // The variable 'e' is declared but never used { string query = rawCQ.Query.ToString(); var begin = query.IndexOf("BEGIN", StringComparison.CurrentCultureIgnoreCase) + 5; cq.Query = query.Substring(begin, query.IndexOf(" END", StringComparison.CurrentCultureIgnoreCase)); } queries.Add(cq); } } return(queries); }