Skip to content

Commit

Permalink
change some names and types around
Browse files Browse the repository at this point in the history
  • Loading branch information
neptunian committed Dec 13, 2019
1 parent 440bae7 commit 1e85c5b
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 24 deletions.
10 changes: 9 additions & 1 deletion x-pack/legacy/plugins/epm/common/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
SavedObjectAttributes,
SavedObjectReference,
} from '../../../../../src/core/server';
import { Asset } from '../../ingest/server/libs/types';

export enum InstallationStatus {
installed = 'installed',
Expand Down Expand Up @@ -160,5 +161,12 @@ export type AssetReference = Pick<SavedObjectReference, 'id' | 'type'>;
export interface DatasourcePayload {
pkgkey: string;
datasourceName: string;
datasetsToInstall: Dataset[];
datasets: Dataset[];
}

export interface CreateFakeDatasource {
pkg: RegistryPackage;
datasourceName: string;
datasets: Dataset[];
assets: Asset[] | undefined;
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export const AddDataSourceForm = (props: AddDataSourceStepsProps) => {
try {
await installDatasource({
pkgkey: `${pkgName}-${pkgVersion}`,
datasetsToInstall: datasets.filter(d => formState.datasets[d.name] === true),
datasets: datasets.filter(d => formState.datasets[d.name] === true),
datasourceName: formState.datasourceName,
});
setAddDataSourceSuccess(true);
Expand Down
44 changes: 25 additions & 19 deletions x-pack/legacy/plugins/epm/server/datasources/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
AssetReference,
InstallationStatus,
RegistryPackage,
DatasourcePayload,
CreateFakeDatasource,
Dataset,
} from '../../common/types';
import { CallESAsCurrentUser } from '../lib/cluster_access';
Expand All @@ -25,17 +25,18 @@ import { Request } from '../types';

export async function createDatasource(options: {
savedObjectsClient: SavedObjectsClientContract;
payload: DatasourcePayload;
callCluster: CallESAsCurrentUser;
request: Request;
pkgkey: string;
datasourceName: string;
datasets: Dataset[];
}) {
const { savedObjectsClient, payload, callCluster, request } = options;
const { pkgkey, datasetsToInstall, datasourceName } = payload;
const { savedObjectsClient, callCluster, pkgkey, datasets, datasourceName, request } = options;
const packageInfo = await getPackageInfo({ savedObjectsClient, pkgkey });
if (packageInfo.status !== InstallationStatus.installed) {
throw new PackageNotInstalledError(pkgkey);
}
const datasetNames = datasetsToInstall.map(d => d.name);
const datasetNames = datasets.map(d => d.name);
const toSave = await installPipelines({ pkgkey, datasetNames, callCluster });

// TODO: This should be moved out of the initial data source creation in the end
Expand All @@ -48,7 +49,7 @@ export async function createDatasource(options: {
savedObjectsClient,
pkg,
datasourceName,
datasetsToInstall,
datasets,
toSave,
request,
}),
Expand All @@ -73,12 +74,12 @@ async function baseSetup(callCluster: CallESAsCurrentUser) {
async function saveDatasourceReferences(options: {
savedObjectsClient: SavedObjectsClientContract;
pkg: RegistryPackage;
datasetsToInstall: Dataset[];
datasets: Dataset[];
datasourceName: string;
toSave: AssetReference[];
request: Request;
}) {
const { savedObjectsClient, pkg, toSave, datasetsToInstall, datasourceName, request } = options;
const { savedObjectsClient, pkg, toSave, datasets, datasourceName, request } = options;
const savedDatasource = await getDatasource({ savedObjectsClient, pkg });
const savedAssets = savedDatasource?.package.assets;
const assetsReducer = (current: Asset[] = [], pending: Asset) => {
Expand All @@ -87,13 +88,18 @@ async function saveDatasourceReferences(options: {
return current;
};

const toInstall = (toSave as Asset[]).reduce(assetsReducer, savedAssets, );
const datasource: Datasource = createFakeDatasource(pkg, datasourceName, datasetsToInstall, toInstall);
const toInstall = (toSave as Asset[]).reduce(assetsReducer, savedAssets);
const datasource: Datasource = createFakeDatasource({
pkg,
datasourceName,
datasets,
assets: toInstall,
});
// ideally we'd call .create from /x-pack/legacy/plugins/ingest/server/libs/datasources.ts#L22
// or something similar, but it's a class not an object so many pieces are missing
// we'd still need `user` from the request object, but that's not terrible
// lacking that we make another http request to Ingest
await ingestDatasourceCreate({ request, datasource });
await ingestDatasourceCreate({ request, datasource });;

return toInstall;
}
Expand All @@ -110,14 +116,14 @@ async function getDatasource(options: {
return datasource?.attributes;
}

function createFakeDatasource(
pkg: RegistryPackage,
datasourceName: string,
datasetsToInstall: Dataset[],
assets: Asset[] = []
): Datasource {
const streams = datasetsToInstall.map(stream => ({
id: stream.name,
function createFakeDatasource({
pkg,
datasourceName,
datasets,
assets = [],
}: CreateFakeDatasource): Datasource {
const streams = datasets.map(dataset => ({
id: dataset.name,
input: {
type: InputType.Log,
config: { config: 'values', go: 'here' },
Expand Down
5 changes: 4 additions & 1 deletion x-pack/legacy/plugins/epm/server/datasources/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export async function handleRequestInstallDatasource(
request: CreateDatasourceRequest,
extra: Extra
) {
const { pkgkey, datasets, datasourceName } = request.payload;
const user = await request.server.plugins.security?.getUser(request);
if (!user) return Boom.unauthorized('Must be logged in to perform this operation');

Expand All @@ -38,7 +39,9 @@ export async function handleRequestInstallDatasource(
try {
const result = await createDatasource({
savedObjectsClient,
payload: request.payload,
pkgkey,
datasets,
datasourceName,
callCluster,
// long-term, I don't want to pass `request` through
// but this was the fastest/least invasive change way to make the change
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ const isFields = (path: string) => {
*/
export async function installTemplates(
pkg: RegistryPackage,
datasetsToInstall: Dataset[],
datasets: Dataset[],
callCluster: CallESAsCurrentUser
) {
// If no datasets exist in this package, no templates have to be installed.
if (!pkg.datasets) return;
return datasetsToInstall.map(async dataset => {
return datasets.map(async dataset => {
// Fetch all assset entries for this dataset
const assetEntries = await getAssetsData(pkg, isFields, dataset.name);
// Merge all the fields of a dataset together and create an Elasticsearch index template
Expand Down

0 comments on commit 1e85c5b

Please sign in to comment.