influxdata / influxdata/telegraf

Implement plugin for Citrix ADC

Open
#11,536 3 comments 0 reactions 0 assignees View on GitHub
feature request help wanted
Dominant language
Go
Stars
17.8k
Forks
5.8k
Avg merge
1d 20h
Merged PRs (30d)
161

Description

## Feature Request

### Proposal:
I need a feature in http plugin to make a specific API call, so I can switch Citrix ADC partition

### Current behavior:
I can only make API calls into default partition

### Desired behavior:
I can draw telemetry data from all Citrix ADC partitions

### Use case:
In multi-tenancy environment Citrix ADC can be divided into partitions. Usually the default partition is only for management, therefore it won't hold any significant telemetry data. To get all data it is needed to make a specific API call to switch into different partition.
While I need this for Citrix ADC, I do see that such custom API call could be useful for other vendor equipment where "switch context" feature is needed.

### Example:
```
1. Initiate session
curl -ik https://netscaler/nitro/v1/config/login -X POST -H 'Content-Type: application/json' -d '{ "login" :{"username": "netscaler", "password": "password"}}'

=============================================

2. Try to get stats - result is empty because this is the default partition
curl -ik https://netscaler/nitro/v1/stat/lbvserver -H 'Content-Type: application/json' --cookie "sessionid=%23%2387A952CDD153F6970F74BCD4BC04D2BAAE716A82809D214215AF3977A2468C81F44D56208FAFA03ECF80372E74C96A0A4D075F3919C9BDAEB061321C9B518C162ED95E301853759D610304EBBF32DDF22832C6252D8223E73EC5F1288722313EF9EDDE5E44A62CA53E32EB5F3DF21A429D92958AB59A53717B0DDB329C54; path=/nitro/v1"
HTTP/1.1 200 OK
Date: Thu, 21 Jul 2022 12:18:10 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Feature-Policy: camera 'none'; microphone 'none'; geolocation 'none'
Referrer-Policy: no-referrer
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Length: 57
Content-Type: application/json; charset=utf-8

{ "errorcode": 0, "message": "Done", "severity": "NONE" }

=============================================

3. See a list of partitions
curl -ik https://netscaler/nitro/v1/stat/nspartition -H 'Content-Type: application/json' --cookie "sessionid=%23%23AC159C232C72493EA59E2237A0ACB9C6ABDF459A54EC7075954360040A0A3D81D8BEF29F9FD10A7747D2366A2D5A7DB0E988F11561F5646BE827A6023DB0E5A1BCA99FFB65643CBB9AB8535E39A2F5EC9F1D4B3E2352B35C5E91D82DBB6D1144D30D7671DE6D33B850F1EE1D5057987C32D67493B1AEAA19C7367720555A; path=/nitro/v1"
HTTP/1.1 200 OK
Date: Thu, 21 Jul 2022 12:00:43 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Feature-Policy: camera 'none'; microphone 'none'; geolocation 'none'
Referrer-Policy: no-referrer
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Length: 3120
Content-Type: application/json; charset=utf-8

{ "errorcode": 0, "message": "Done", "severity": "NONE", "nspartition": [ { "partitionname": "mypartitionname", "maxbandwidth": "102400", "maxconnection": "50000", "maxmemory": "512", "currentbandwidth": "0", "currentconnections": "24", "memoryusagepcnt": "2", "totaldrops": "0", "dropsrate": 0, "totaltokendrops": "0", "tokendropsrate": 0, "totalconnectiondrops": "0", "connectiondropsrate": 0 } ] }

=============================================

4. Switch to partition
curl -ik https://netscaler/nitro/v1/config/nspartition?action=Switch -X POST -H 'Content-Type: application/json' -d '{ "nspartition":{ "partitionname": "mypartitionname"}}' --cookie "sessionid=%23%234982432AB20506FA9CD2229153EB6B1C5E8DB5D81CB7DAF39731C5BF125B1D82EE41A7EA7FD7FCE31DF43B5ADF925410F82820FC1D9A59A9BEABACDC0A26D62AFB46310BCD00C24E2885115876F6A087F68B3D3A862BD5BA801C01409AF614AECD1EACB161F574B33F3E03E9C3806493D7487F542EE4157F0EEC083324CA; path=/nitro/v1"
HTTP/1.1 200 OK
Date: Thu, 21 Jul 2022 12:01:34 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Feature-Policy: camera 'none'; microphone 'none'; geolocation 'none'
Referrer-Policy: no-referrer
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Length: 0
Content-Type: text/html; charset=UTF-8

=============================================

5. Try to get stats - now we do get something
curl -ik https://netscaler/nitro/v1/stat/lbvserver -H 'Content-Type: application/json' --cookie "sessionid=%23%234982432AB20506FA9CD2229153EB6B1C5E8DB5D81CB7DAF39731C5BF125B1D82EE41A7EA7FD7FCE31DF43B5ADF925410F82820FC1D9A59A9BEABACDC0A26D62AFB46310BCD00C24E2885115876F6A087F68B3D3A862BD5BA801C01409AF614AECD1EACB161F574B33F3E03E9C3806493D7487F542EE4157F0EEC083324CA; path=/nitro/v1"
HTTP/1.1 200 OK
Date: Thu, 21 Jul 2022 12:01:49 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Feature-Policy: camera 'none'; microphone 'none'; geolocation 'none'
Referrer-Policy: no-referrer
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8

{ "errorcode": 0, "message": "Done", "severity": "NONE", "lbvserver": [ { "name": "lb-test-ssl", "avgcltttlb": "0", "cltresponsetimeapdex": 1.000000, "vsvrsurgecount": "0", "establishedconn": "0", "inactsvcs": "0", "vslbhealth": "0", "primaryipaddress": "169.254.1.1", "primaryport": 443, "type": "SSL", "state": "DOWN", "actsvcs": "0", "cpuusagepm": "0", "tothits": "0", "hitsrate": 0, "totalrequests": "0", "requestsrate": 0, "totalresponses": "0", "responsesrate": 0, "totalrequestbytes": "0", "requestbytesrate": 0, "totalresponsebytes": "0", "responsebytesrate": 0, "totalh2requests": "0", "h2requestsrate": 0, "totalh2responses": "0", "h2responsesrate": 0, "totalpktsrecvd": "0", "pktsrecvdrate": 0, "totalpktssent": "0", "pktssentrate": 0, "curclntconnections": "0", "cursrvrconnections": "0", "curpersistencesessions": "0", "curbackuppersistencesessions": "0", "surgecount": "0", "svcsurgecount": "0", "sothreshold": "0", "totspillovers": "0", "labelledconn": "0", "pushlabel": "0", "deferredreq": "0", "deferredreqrate": 0, "invalidrequestresponse": "0", "invalidrequestresponsedropped": "0", "totvserverdownbackuphits": "0", "curmptcpsessions": "0", "cursubflowconn": "0", "totalconnreassemblyqueue75": "0", "totalconnreassemblyqueueflush": "0", "totalsvrbusyerr": "0", "svrbusyerrrate": 0, "reqretrycount": "0", "reqretrycountexceeded": "0", "httpmaxhdrszpkts": "0", "httpmaxhdrfldlenpkts": "0", "tcpmaxooopkts": "0", "totcltttlbtransactions": "0", "cltttlbtransactionsrate": 0, "toleratingttlbtransactions": "0", "toleratingttlbtransactionsrate": 0, "frustratingttlbtransactions": "0", "frustratingttlbtransactionsrate": 0 } ] }

=============================================

6. Switching back to default partition
curl -ik https://netscaler/nitro/v1/config/nspartition?action=Switch -X POST -H 'Content-Type: application/json' -d '{ "nspartition":{ "partitionname": "default"}}' --cookie "sessionid=%23%234982432AB20506FA9CD2229153EB6B1C5E8DB5D81CB7DAF39731C5BF125B1D82EE41A7EA7FD7FCE31DF43B5ADF925410F82820FC1D9A59A9BEABACDC0A26D62AFB46310BCD00C24E2885115876F6A087F68B3D3A862BD5BA801C01409AF614AECD1EACB161F574B33F3E03E9C3806493D7487F542EE4157F0EEC083324CA; path=/nitro/v1"
HTTP/1.1 200 OK
Date: Thu, 21 Jul 2022 12:02:05 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Feature-Policy: camera 'none'; microphone 'none'; geolocation 'none'
Referrer-Policy: no-referrer
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Length: 0
Content-Type: text/html; charset=UTF-8
```

Partition switch is documented here:
https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/ns/nspartition/#switch

Basically I need Telegraf to do steps 1 and 4 from above example in a sequence before I make any other API calls that draw data (step 5 in example). Currently Telegraf can do authentication (step 1), but it can't send custom API call mentioned in step 4, before getting real data.

Contributor guide

Open the contributing guide

Research direction

Start with the HTTP plugin's authentication and request flow, using the issue's Citrix ADC steps 1 and 4 as the behavioral reference. Determine how a custom API call can run after authentication and before telemetry requests; done means partition data can be collected without breaking the existing default-partition behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
api, backend
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.