Not able to create Grafana User using HTTP API - grafana-api

I am trying to create the grafana users using API's and this is what I tried.
curl -XPOST -H “Content-Type: application/json” -d ‘{“name”:“User”,“email”:“user#graf.com”,“login”:“user”,“password”:“password”}’ http://admin:admin#localhost:3000/api/admin/users
got this: [{“classification”:“DeserializationError”,“message”:“invalid character ‘\’’ looking for beginning of value”},{“fieldNames”:[“Password”],“classification”:“RequiredError”,“message”:“Required”}]
Can any one help me?

I followed the http://docs.grafana.org/http_api/user/ documentation and now I am able to create the users and able to use all grafana api's
Here is the answer for my question
import requests
url='http://admin:admin#localhost:3000/api/admin/users'
data='''{
"name":"tester",
"email":"test#graadff.com",
"login":"tester",
"password":"test#123"
}'''
headers={"Content-Type": 'application/json'}
response = requests.post(url, data=data,headers=headers)
print (response.text)

Related

Mixpanel delete user data using api

I want to delete all the data created for a user on mix panel . I have tried to use mixpanel engage api to delete the profile but i can still see the profile . Only profile properties is getting cleared .
curl --request POST
--url 'https://api.mixpanel.com/engage#profile-delete'
--header 'Accept: text/plain'
--header 'Content-Type: application/x-www-form-urlencoded'
--data 'data={
"$token": "YOUR_PROJECT_TOKEN",
"$distinct_id": "13793",
"$delete": "",
"$ignore_alias": false
}
'
What is $delete field used for (didn't find anything in the mixpanel documentation)
How can i delete everything created for a user via api (profile , event and properties)
You can't delete the data from mixpanel using the api. Instead refer to https://help.mixpanel.com/hc/en-us/articles/360000881023-Export-or-Delete-End-User-Data
If you only need to hide the data (not applicable if you for example need to delete it for GDPR reasons), you can overwrite it using the the import api, and add a field to it that you then filter out (i.e. deleted=true).
Events with identical values for (event, time, distinct_id, $insert_id) are considered duplicates and only one of them will be surfaced in queries.
Have a look at https://developer.mixpanel.com/reference/import-events to use this solution.

drf_yasg and amazon api gateway returns json instead of html ui

I have setup my python api service using djangorestframework and I am using drf_yasg for showing swagger docs for my api.
Here is glance of setup:
schema_view = get_schema_view(
openapi.Info(
title='My API',
default_version='v1',
description='rest service',
terms_of_service='',
contact=openapi.Contact(email='my#email'),
license=openapi.License(name='BSD License'),
),
public=False,
)
urlpatterns = [
path('pyapi/weather/', include('apps.weather.urls')),
re_path(r'^pyapi/swagger(?P<format>\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),
re_path(r'^pyapi/swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
re_path(r'^pyapi/redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]
Next I setup this api with amazon ec2 and stuff, and I am using Amazon API Gateway to access the api from containers.
Now the problem is when I try to access that using api gateway domain, it returns swagger JSON instead of HTML.
I tried several things like setting Content-Type mappings in method response and integration response but nothing works.
In my local machine it shows html as expected, so I am suspecting problem is in my gateway settings.
I highly appreciate if someone can help!
Ok I solved mystery!
After tons of tries and looking here and there, I found there was problem in API Gateway Request header setting.
Actually drf-yasg also kind of weird let me tell you why.
After setting up urls as I shown in first image, if you try to access http://localhost:8000/pyapi/swagger/ it shows UI perfectly.
At that time value of request header is Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Now same URL if you pass request header "Accept: application/json" then istead of showing html UI, it shows swagger JSON! wutt!!
That I found in Amazon API Gateways's test method's output. It was by default sending "Accept: application/json" and thats why I was always getting swagger.json in output. That was showstopper thing!
I changed it to Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 and now I could see UI perfectly!
I hope this will save time of many other people like me who are new to this kind of stuff!

How to import grafana dashboard json file manually

I have exported the dashboard in json format.
I want to import the json file manually to create the same dashboard in new grafana instance.
While googling i got some related information but finding difficulties to implement successfully.
From the site Grafana API link i got the code snippet like,
POST /api/dashboards/db HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
“dashboard”: {
“id”: null,
“uid”: null,
“title”: “Production Overview”,
“tags”: [ “templated” ],
“timezone”: “browser”,
“schemaVersion”: 16,
“version”: 0
},
“folderId”: 0,
“overwrite”: false
}
The above code snippet looks like we can create new dashboard with existing json file but i have no idea of how to implement this code snippet successfully.
Somebody guide me how to achieve this?
There are two techniques to copy the current dashboard -
if you want to export this
Go to Current Grafana Dashboard
Select the Share button on the top
Select the Export Button and Copy the JSON or save it as JSON
Create new Grafana dashboard and copy this JSON model to
Click on the Setting button on the top
Click on JSON Model - from left panel
Past the JSON & Save the dashboard and run
Please let me know if you have any issue.
I found and answer to your question - how to import a dashboard in grafana by api - in this post on the community board of Grafana:
https://community.grafana.com/t/how-create-dashboard-and-panel-via-api/10947
Haven't tried this out yet though (we are planning on doing something like this as well).
I will quote the original question in this post:
Hi All,
I know how to create a dashboard via API but I don’t find instructions to how to create panels within that dashboard still via API. Any idea?
the part of the message that explains the answer:
And the response that contains the answer to the question:
The panels need to be defined within the JSON that you submit in your POST request.
The example in the docs doesn’t spell this out, beyond
dashboard – The complete dashboard model
To get hands-on with this, you can (1) create a new dashboard with some panels manually, (2) export that dashboard’s definition as JSON, (3) put the exported dashboard definition inside the “dashboard” field of a new JSON object, (4) POST the resulting JSON object to the API endpoint. This will create a copy of your original dashboard. From there on, you can edit the JSON model you’re posting in order to modify or add any panels you desire.
So to your original question, if you want to add a panel to an existing dashboard you can obtain its definition via the API, add the panel to the JSON object, and push the updated model. (keep the same id/uid and set "overwrite": true)"
Note that (now?) grafana has a nice import function too:

How to get dropdown list key value using sugacrm restful api?

I am a new CodeIgniter framework developer. I have created a sample program for CodeIgniter using SugarCRM library rest API concepts. I havintegratedte and connect SugarCRM rest api working. I ha to get dropdown list item value using rest api. Please help me how to get dropdown list value
Thanks
To get a list of enum values you have to make an HTTP request to the sugarcrm. Use a GET verb to request data from:
https://<name>.sugarondemand.com//rest/<api_version>/<module_name>/enum/<enum_name>
Let's assume that name = flex, api_version = 11_6, module_name = Leads, enum_name = lead_soruce then the full url value should be
https://flex.sugarondemand.com/rest/v11_6/Leads/enum/lead_source
And the full get request (with curl):
curl -X GET -H Cache-Control:no-cache -H "Oauth-token":"<access_token>" https://flex.sugarondemand.com/rest/v11_6/Leads/enum/lead_source
If you don't have the access token then use the following request to get the access and the refresh tokens
curl -X POST -H Cache-Control:no-cache -H "Content-Type: application/json" -d '{
"grant_type":"password",
"client_id":"sugar",
"client_secret":"",
"username":"<username>",
"password":"<user_password>",
"platform":"custom_api"
}' https://<client_name>.sugarondemand.com/rest/v11_6/oauth2/token

How do I find the API endpoint of a lambda function?

I have a Lambda function that has an exposed API Gateway endpoint, and I can get the URL for that via the AWS console. However, I would like to get that URL via API call. Neither the Lambda API documentation nor the API Gateway documentation seem to have that information (or perhaps I've missed it), so is this even possible in the first place?
I don't really understand the above answer (maybe it's outdated?).
The absolute easiest way:
Choose "API Gateway" under "Services" in AWS.
Click on your API.
Click on "Stages".
Choose the stage you want to use
Now you can see the entire URL very visible inside a blue box on the top with the heading "Invoke URL"
Your API Gateway endpoint URL doesn't get exposed via an API call. However, since the URL of the API follows a certain structure, you could get all the necessary pieces and create the URI within your code.
https://API-ID.execute-api.REGION.amazonaws.com/STAGE
You could use apigateway:rest-apis to get your API-ID and restapi:stages to get the stage corresponding identifier.
I'm not seeing a direct answer to the OP's question (get endpoint URL using API). Here's a snippet of Python code that I hope will guide the way, even if you're using other language bindings or the CLI. Note the difference in approach for getting the internal endpoint vs getting any associated custom domain endpoints.
import boto3
apigw = boto3.client('apigateway')
def get_rest_api_internal_endpoint(api_id, stage_name, region=None):
if region is None:
region = apigw.meta.region_name
return f"https://{api_id}.execute-api.{region}.amazonaws.com/{stage_name}"
def get_rest_api_public_endpoints(api_id, stage_name):
endpoints = []
for item in apigw.get_domain_names().get('items',[]):
domain_name = item['domainName']
for mapping in apigw.get_base_path_mappings(domainName=domain_name).get('items', []):
if mapping['restApiId'] == api_id and mapping['stage'] == stage_name:
path = mapping['basePath']
endpoint = f"https://{domain_name}"
if path != "(none)":
endpoint += path
endpoints.append(endpoint)
return endpoints
Go to you lambda main page -> Click on "Application" [Function Overview section] -> Resource section -> LambdaAPIDefinition -> Stages tab -> [Select required stage] -> [Invoke URL] You can see the api endpoint visible.
Following up on #larschanders comment, if you create the gateway using CloudFormation, the endpoint URL is surfaced as one of the stack outputs.
If you use CloudFormation you can get this with Python and Boto3:
import boto3
cloudformation = boto3.resource('cloudformation')
stack = cloudformation.Stack(name=stack_name)
api_url = next(
output['OutputValue'] for output in stack.outputs
if output['OutputKey'] == 'EndpointURL')
This is from a working example of a REST service using Chalice that I put on GitHub. Here's a link to the pertinent code, in context: aws-doc-sdk-examples.
If you know the function name, you can get the apigw endpoint by fetching the policy:
aws lambda get-policy --function-name <name> \
| jq -r '.Policy | fromjson | .Statement[0].Condition.ArnLike."AWS:SourceArn"'
THen it's just a matter of extracting the api_id and construct the endpoint like Jurgen suggested
A Script is the only answer as of now
But if someone wants to do purely on CLI using commands here is the long way (though I am a very beginner in AWS and I tried this during learning Lambda basics), maybe there is a much better way...
The format of Invoke-URL of the endpoint is something like this
https://YOUR-REST-API-ID.execute-api.REGION.amazonaws.com/STAGE/RESOURCE
// get YOUR-REST-API-ID e.g., 0w12zl28di
aws apigateway get-rest-apis | jq -r '.items[] | [.id, .name] | #tsv'
// get REGION using Lambda_function_name e.g., ap-east-1
aws lambda get-function-configuration --function-name YOUR_LAMBDA_FUNCTION_NAME | jq '.FunctionArn | split(":")[3]'
// get STAGE e.g., dev
aws apigateway get-stages --rest-api-id YOUR-REST-API-ID | jq -r '.item[] | [.stageName] | #tsv'
// get RESOURCE e.g., users
aws apigateway get-resources --rest-api-id YOUR-REST-API-ID | jq '.items[] | [.id, .path]'
// finally put your pieces in this way
https://0w12zl28di.execute-api.ap-east-1.amazonaws.com/dev/users
Note you have to install jq parser (if you don't have it already)
https://stedolan.github.io/jq/download/
I was using Linux on top of Windows, so I need to do it in this way
curl -L -o /usr/bin/jq.exe https://github.com/stedolan/jq/releases/latest/download/jq-win64.exe
To very precise Go to AWS Console search :
Lambda under services
Search the Function name which are looking for.
In Function overview, you will find API GATEWAY (Click on this)
Under API GATEWAY, click on Details (down arrow)
Under Details, you will find all the details like
API endpoint :
API type :
Authorization :
Method :
Resource path :
Stage :

Resources