grafana/scripts/cli/tasks/searchTestDataSetup.ts
Torkel Ödegaard ad3f9c6663
CLI: Search perf test data (#17422)
* Search perf testdata cli task

* Test index

* REmoved test index
2019-06-06 10:05:08 +02:00

118 lines
3.2 KiB
TypeScript

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);