Skip to content

Commit

Permalink
Use advanced settings for csv separator and visual report timezone (#209
Browse files Browse the repository at this point in the history
)
  • Loading branch information
joshuali925 committed Nov 4, 2021
1 parent 42594da commit c8dd5bf
Show file tree
Hide file tree
Showing 8 changed files with 73 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,9 @@ const generateInContextReport = async (
};

fetch(
`../api/reporting/generateReport?timezone=${
Intl.DateTimeFormat().resolvedOptions().timeZone
}&dateFormat=${uiSettingsService.get('dateFormat')}`,
`../api/reporting/generateReport?${new URLSearchParams(
uiSettingsService.getSearchParams()
)}`,
{
headers: {
'Content-Type': 'application/json',
Expand Down
10 changes: 2 additions & 8 deletions dashboards-reports/public/components/main/main_utils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -181,10 +181,7 @@ export const generateReportFromDefinitionId = async (
headers: {
'Content-Type': 'application/json',
},
query: {
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
dateFormat: uiSettingsService.get('dateFormat'),
},
query: uiSettingsService.getSearchParams(),
})
.then(async (response: any) => {
// for emailing a report, this API response doesn't have response body
Expand Down Expand Up @@ -217,10 +214,7 @@ export const generateReportById = async (
) => {
await httpClient
.get(`../api/reporting/generateReport/${reportId}`, {
query: {
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
dateFormat: uiSettingsService.get('dateFormat'),
},
query: uiSettingsService.getSearchParams(),
})
.then(async (response) => {
//TODO: duplicate code, extract to be a function that can reuse. e.g. handleResponse(response)
Expand Down
14 changes: 14 additions & 0 deletions dashboards-reports/public/components/utils/settings_service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,18 @@ export const uiSettingsService = {
get: (key: string, defaultOverride?: any) => {
return uiSettings?.get(key, defaultOverride) || '';
},
getSearchParams: function () {
const rawTimeZone = this.get('dateFormat:tz');
const timezone =
!rawTimeZone || rawTimeZone === 'Browser'
? Intl.DateTimeFormat().resolvedOptions().timeZone
: rawTimeZone;
const dateFormat = this.get('dateFormat');
const csvSeparator = this.get('csv:separator');
return {
timezone,
dateFormat,
csvSeparator,
};
},
};
3 changes: 3 additions & 0 deletions dashboards-reports/server/routes/lib/createReport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ export const createReport = async (
// @ts-ignore
const dateFormat =
request.query.dateFormat || DATA_REPORT_CONFIG.excelDateFormat;
// @ts-ignore
const csvSeparator = request.query.csvSeparator || ',';
const {
basePath,
serverInfo: { protocol, port, hostname },
Expand Down Expand Up @@ -98,6 +100,7 @@ export const createReport = async (
report,
opensearchClient,
dateFormat,
csvSeparator,
isScheduledTask,
logger
);
Expand Down
7 changes: 5 additions & 2 deletions dashboards-reports/server/routes/report.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ export default function (router: IRouter, accessInfo: AccessInfoType) {
query: schema.object({
timezone: schema.maybe(schema.string()),
dateFormat: schema.maybe(schema.string()),
csvSeparator: schema.maybe(schema.string()),
}),
},
},
Expand Down Expand Up @@ -122,7 +123,8 @@ export default function (router: IRouter, accessInfo: AccessInfoType) {
}),
query: schema.object({
timezone: schema.string(),
dateFormat: schema.maybe(schema.string()),
dateFormat: schema.string(),
csvSeparator: schema.string(),
}),
},
},
Expand Down Expand Up @@ -188,7 +190,8 @@ export default function (router: IRouter, accessInfo: AccessInfoType) {
}),
query: schema.object({
timezone: schema.string(),
dateFormat: schema.maybe(schema.string()),
dateFormat: schema.string(),
csvSeparator: schema.string(),
}),
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ const input = {
},
};

const mockDateFormat = 'date_hour_minute_second_fraction';
const mockDateFormat = 'MM/DD/YYYY h:mm:ss.SSS a';

/**
* Max result window size in OpenSearch index settings.
Expand All @@ -84,6 +84,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand All @@ -95,6 +96,7 @@ describe('test create saved search report', () => {
input,
mockOpenSearchClient([]),
mockDateFormat,
',',
undefined,
mockLogger
);
Expand All @@ -105,6 +107,7 @@ describe('test create saved search report', () => {
input,
mockOpenSearchClient([]),
mockDateFormat,
',',
undefined,
mockLogger
);
Expand All @@ -118,6 +121,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand All @@ -137,6 +141,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand Down Expand Up @@ -170,6 +175,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand Down Expand Up @@ -206,6 +212,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand Down Expand Up @@ -234,6 +241,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand Down Expand Up @@ -266,6 +274,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand All @@ -292,6 +301,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand All @@ -304,6 +314,30 @@ describe('test create saved search report', () => {
);
}, 20000);

test('create report for data set with comma and custom separator', async () => {
const hits = [
hit({ category: ',c1', customer_gender: 'Ma,le' }),
hit({ category: 'c2,', customer_gender: 'M,ale' }),
hit({ category: ',,c3', customer_gender: 'Male,,,' }),
];
const client = mockOpenSearchClient(hits);
const { dataUrl } = await createSavedSearchReport(
input,
client,
mockDateFormat,
'|',
undefined,
mockLogger
);

expect(dataUrl).toEqual(
'category|customer_gender\n' +
',c1|Ma,le\n' +
'c2,|M,ale\n' +
',,c3|Male,,,'
);
}, 20000);

test('create report for data set with nested fields', async () => {
const hits = [
hit({
Expand All @@ -324,6 +358,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand All @@ -348,6 +383,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand Down Expand Up @@ -378,6 +414,7 @@ describe('test create saved search report', () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand All @@ -404,6 +441,7 @@ test('create report for data set contains null field value', async () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand Down Expand Up @@ -434,6 +472,7 @@ test('create report for data set with metadata fields', async () => {
input,
client,
mockDateFormat,
',',
undefined,
mockLogger
);
Expand Down
4 changes: 2 additions & 2 deletions dashboards-reports/server/routes/utils/dataReportHelpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,10 +163,10 @@ export const getOpenSearchData = (
};

//Convert the data to Csv format
export const convertToCSV = async (dataset) => {
export const convertToCSV = async (dataset, csvSeparator) => {
let convertedData: any = [];
const options = {
delimiter: { field: ',', eol: '\n' },
delimiter: { field: csvSeparator, eol: '\n' },
emptyFieldValue: ' ',
};
await converter.json2csvAsync(dataset[0], options).then((csv) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export async function createSavedSearchReport(
report: any,
client: ILegacyClusterClient | ILegacyScopedClusterClient,
dateFormat: string,
csvSeparator: string,
isScheduledTask: boolean = true,
logger: Logger
): Promise<CreateReportResultType> {
Expand All @@ -62,6 +63,7 @@ export async function createSavedSearchReport(
client,
params.core_params,
dateFormat,
csvSeparator,
isScheduledTask,
logger
);
Expand Down Expand Up @@ -148,6 +150,7 @@ async function generateReportData(
client: ILegacyClusterClient | ILegacyScopedClusterClient,
params: any,
dateFormat: string,
csvSeparator: string,
isScheduledTask: boolean,
logger: Logger
) {
Expand Down Expand Up @@ -277,6 +280,6 @@ async function generateReportData(
async function convertOpenSearchDataToCsv() {
const dataset: any = [];
dataset.push(getOpenSearchData(arrayHits, report, params, dateFormat));
return await convertToCSV(dataset);
return await convertToCSV(dataset, csvSeparator);
}
}

0 comments on commit c8dd5bf

Please sign in to comment.