/// <summary>
        /// Update a telegraf config.
        /// </summary>
        /// <param name="telegrafId">ID of telegraf config</param>
        /// <param name="telegrafRequest">telegraf config update to apply</param>
        /// <returns>An updated telegraf</returns>
        public async Task <Telegraf> UpdateTelegrafAsync(string telegrafId, TelegrafRequest telegrafRequest)
        {
            Arguments.CheckNonEmptyString(telegrafId, nameof(telegrafId));
            Arguments.CheckNotNull(telegrafRequest, nameof(telegrafRequest));

            return(await _service.PutTelegrafsIDAsync(telegrafId, telegrafRequest));
        }
        /// <summary>
        /// Create a telegraf config.
        /// </summary>
        /// <param name="name">Telegraf Configuration Name</param>
        /// <param name="description">Telegraf Configuration Description</param>
        /// <param name="orgId">The organization that owns this config</param>
        /// <param name="config">ConfigTOML contains the raw toml config</param>
        /// <param name="metadata">Metadata for the config</param>
        /// <returns>Telegraf config created</returns>
        public async Task <Telegraf> CreateTelegrafAsync(string name, string description, string orgId,
                                                         string config, TelegrafRequestMetadata metadata)
        {
            var request = new TelegrafRequest(name, description, metadata, config, orgId);

            return(await CreateTelegrafAsync(request));
        }
예제 #3
0
        /// <summary>
        /// Clone a telegraf config.
        /// </summary>
        /// <param name="clonedName">name of cloned telegraf config</param>
        /// <param name="telegraf">telegraf config to clone></param>
        /// <returns>cloned telegraf config</returns>
        public async Task <Telegraf> CloneTelegrafAsync(string clonedName, Telegraf telegraf)
        {
            Arguments.CheckNonEmptyString(clonedName, nameof(clonedName));
            Arguments.CheckNotNull(telegraf, nameof(telegraf));

            var cloned = new TelegrafRequest(clonedName, telegraf.Description, telegraf.Metadata, telegraf.Config,
                                             telegraf.OrgID);

            return(await CreateTelegrafAsync(cloned).ContinueWith(created =>
            {
                //
                // Add labels
                //
                return GetLabelsAsync(telegraf)
                .ContinueWith(labels =>
                {
                    return labels.Result.Select(label => AddLabelAsync(label, created.Result));
                })
                .ContinueWith(async tasks =>
                {
                    await Task.WhenAll(tasks.Result);
                    return created.Result;
                })
                .Unwrap();
            }).Unwrap());
        }
예제 #4
0
        /// <summary>
        /// Update a telegraf config.
        /// </summary>
        /// <param name="telegraf">telegraf config update to apply</param>
        /// <returns>An updated telegraf</returns>
        public Task<Telegraf> UpdateTelegrafAsync(Telegraf telegraf)
        {
            Arguments.CheckNotNull(telegraf, nameof(telegraf));

            var request = new TelegrafRequest(telegraf.Name, telegraf.Description, telegraf.Metadata, telegraf.Config,
                telegraf.OrgID);

            return UpdateTelegrafAsync(telegraf.Id, request);
        }
        /// <summary>
        /// Update a telegraf config.
        /// </summary>
        /// <param name="telegraf">telegraf config update to apply</param>
        /// <returns>An updated telegraf</returns>
        public async Task <Telegraf> UpdateTelegraf(Telegraf telegraf)
        {
            Arguments.CheckNotNull(telegraf, nameof(telegraf));

            var request = new TelegrafRequest(telegraf.Name, telegraf.Description, telegraf.Agent, telegraf.Plugins,
                                              telegraf.OrgID);

            return(await UpdateTelegraf(telegraf.Id, request));
        }
        /// <summary>
        /// Create a telegraf config.
        /// </summary>
        /// <param name="name">Telegraf Configuration Name</param>
        /// <param name="description">Telegraf Configuration Description</param>
        /// <param name="orgId">The ID of the organization that owns this config</param>
        /// <param name="collectionInterval">Default data collection interval for all inputs in milliseconds</param>
        /// <param name="plugins">The telegraf plugins config</param>
        /// <returns>Telegraf config created</returns>
        public async Task <Telegraf> CreateTelegraf(string name, string description, string orgId,
                                                    int collectionInterval, List <TelegrafRequestPlugin> plugins)
        {
            Arguments.CheckNonEmptyString(name, nameof(name));
            Arguments.CheckNonEmptyString(orgId, nameof(orgId));
            Arguments.CheckPositiveNumber(collectionInterval, nameof(collectionInterval));

            var request = new TelegrafRequest(name, description, new TelegrafRequestAgent(collectionInterval), plugins,
                                              orgId);

            return(await CreateTelegraf(request));
        }
예제 #7
0
        /// <summary>
        /// Clone a telegraf config.
        /// </summary>
        /// <param name="clonedName">name of cloned telegraf config</param>
        /// <param name="telegraf">telegraf config to clone></param>
        /// <returns>cloned telegraf config</returns>
        public async Task<Telegraf> CloneTelegrafAsync(string clonedName, Telegraf telegraf)
        {
            Arguments.CheckNonEmptyString(clonedName, nameof(clonedName));
            Arguments.CheckNotNull(telegraf, nameof(telegraf));

            var cloned = new TelegrafRequest(clonedName, telegraf.Description, telegraf.Metadata, telegraf.Config,
                telegraf.OrgID);

            var created = await CreateTelegrafAsync(cloned).ConfigureAwait(false);
            var labels = await GetLabelsAsync(telegraf).ConfigureAwait(false);
            foreach (var label in labels)
            {
                await AddLabelAsync(label, created).ConfigureAwait(false);
            }

            return created;
        }
예제 #8
0
        /// <summary>
        /// Create a telegraf config.
        /// </summary>
        /// <param name="name">Telegraf Configuration Name</param>
        /// <param name="description">Telegraf Configuration Description</param>
        /// <param name="orgId">The organization that owns this config</param>
        /// <param name="agentConfiguration">The telegraf agent config</param>
        /// <param name="plugins">The telegraf plugins config</param>
        /// <returns>Telegraf config created</returns>
        public Task<Telegraf> CreateTelegrafAsync(string name, string description, string orgId,
            Dictionary<string, object> agentConfiguration, List<TelegrafPlugin> plugins)
        {
            var config = new StringBuilder();

            // append agent configuration
            config.Append("[agent]").Append("\n");
            foreach (var pair in agentConfiguration)
            {
                AppendConfiguration(config, pair.Key, pair.Value);
            }

            config.Append("\n");

            // append plugins configuration
            foreach (var plugin in plugins)
            {
                if (!string.IsNullOrEmpty(plugin.Description))
                {
                    config.Append("#").Append(plugin.Description).Append("\n");
                }

                config
                    .Append("[[")
                    .Append(plugin.Type.ToString().ToLower())
                    .Append(".")
                    .Append(plugin.Name)
                    .Append("]]")
                    .Append("\n");

                foreach (var pair in plugin.Config)
                {
                    AppendConfiguration(config, pair.Key, pair.Value);
                }

                config.Append("\n");
            }

            var request = new TelegrafRequest(name: name, description: description, orgID: orgId,
                config: config.ToString());

            return CreateTelegrafAsync(request);
        }
예제 #9
0
        /// <summary>
        /// Create a telegraf config.
        /// </summary>
        /// <param name="telegrafRequest">Telegraf Configuration to create</param>
        /// <returns>Telegraf config created</returns>
        public Task<Telegraf> CreateTelegrafAsync(TelegrafRequest telegrafRequest)
        {
            Arguments.CheckNotNull(telegrafRequest, nameof(telegrafRequest));

            return _service.PostTelegrafsAsync(telegrafRequest);
        }