The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/scripts/cli/tasks/searchTestDataSetup.ts

117 lines
3.2 KiB

import axios from 'axios';
import _ from 'lodash';
import { Task, TaskRunner } from './task';
interface SearchTestDataSetupOptions {
count: number;
}
const client = axios.create({
baseURL: 'http://localhost:3000/api',
auth: {
username: 'admin',
password: 'admin2',
},
});
export async function getUser(user): Promise<any> {
console.log('Creating user ' + user.name);
const search = await client.get('/users/search', {
params: { query: user.login },
});
if (search.data.totalCount === 1) {
user.id = search.data.users[0].id;
return user;
}
const rsp = await client.post('/admin/users', user);
user.id = rsp.data.id;
return user;
}
export async function getTeam(team: any): Promise<any> {
// delete if exists
const teams = await client.get('/teams/search');
for (const existing of teams.data.teams) {
if (existing.name === team.name) {
console.log('Team exists, deleting');
await client.delete('/teams/' + existing.id);
}
}
console.log('Creating team ' + team.name);
const teamRsp = await client.post(`/teams`, team);
team.id = teamRsp.data.teamId;
return team;
}
export async function addToTeam(team: any, user: any): Promise<any> {
const members = await client.get(`/teams/${team.id}/members`);
console.log(`Adding user ${user.name} to team ${team.name}`);
await client.post(`/teams/${team.id}/members`, { userId: user.id });
}
export async function setDashboardAcl(dashboardId: any, aclList: any) {
console.log('Setting Dashboard ACL ' + dashboardId);
await client.post(`/dashboards/id/${dashboardId}/permissions`, { items: aclList });
}
const searchTestDataSetupRunnner: TaskRunner<SearchTestDataSetupOptions> = async ({ count }) => {
const user1 = await getUser({
name: 'searchTestUser1',
email: 'searchTestUser@team.com',
login: 'searchTestUser1',
password: '12345',
});
const team1 = await getTeam({ name: 'searchTestTeam1', email: 'searchtestdata@team.com' });
addToTeam(team1, user1);
// create or update folder
const folder: any = {
uid: 'search-test-data',
title: 'Search test data folder',
version: 1,
};
try {
await client.delete(`/folders/${folder.uid}`);
} catch (err) {}
console.log('Creating folder');
const rsp = await client.post(`/folders`, folder);
folder.id = rsp.data.id;
folder.url = rsp.data.url;
await setDashboardAcl(folder.id, []);
console.log('Creating dashboards');
const dashboards: any = [];
for (let i = 0; i < count; i++) {
const dashboard: any = {
uid: 'search-test-dash-' + i.toString().padStart(5, '0'),
title: 'Search test dash ' + i.toString().padStart(5, '0'),
};
const rsp = await client.post(`/dashboards/db`, {
dashboard: dashboard,
folderId: folder.id,
overwrite: true,
});
dashboard.id = rsp.data.id;
dashboard.url = rsp.data.url;
console.log('Created dashboard ' + dashboard.title);
dashboards.push(dashboard);
await setDashboardAcl(dashboard.id, [{ userId: 0, teamId: team1.id, permission: 4 }]);
}
};
export const searchTestDataSetupTask = new Task<SearchTestDataSetupOptions>();
searchTestDataSetupTask.setName('Search test data setup');
searchTestDataSetupTask.setRunner(searchTestDataSetupRunnner);