Skip to content

Commit

Permalink
Merge pull request #73 from oasysgames/fix/add_runtime_statis_log
Browse files Browse the repository at this point in the history
add logs to user can view total time processing
  • Loading branch information
girafferz authored Dec 19, 2023
2 parents 2205ef5 + ba164b9 commit 5775341
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 111 deletions.
104 changes: 52 additions & 52 deletions src/execute/executeStakerReward.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import moment = require('moment-timezone');
import { GoogleSpreadsheet } from 'google-spreadsheet';
import {
exportCsv,
getAdditionalDataForStakerReward,
getEpoches,
getOasPricesForEpoch,
handleExport,
} from '../module/RewardStakes';
import {
DataExport,
Expand All @@ -14,12 +14,9 @@ import {
Verse,
stakerRewardArgs,
} from '../types';
import {
generateNumberArray,
isValidAddresses,
sortByTimeStamp,
} from '../utils';
import { generateNumberArray, isValidAddresses } from '../utils';
import { convertAddressesToArray } from '../utils/convert';
import { getTotalSecondProcess } from '../utils/date';
import {
DEFAULT_LIST_PRICE,
HEADER_FOR_STAKING_REWARD,
Expand All @@ -28,6 +25,8 @@ import {
import { Subgraph } from '../utils/subgraph';

export const main = async (argv: stakerRewardArgs) => {
const startTimeProcess = Date.now();

// validate address
const addresses = convertAddressesToArray(argv.staker_addresses);
if (!isValidAddresses(addresses)) {
Expand All @@ -54,23 +53,10 @@ export const main = async (argv: stakerRewardArgs) => {
argv,
);
// data to export
let dataExport: DataExport[] = await getDataExport(
prepareData,
subgraph,
argv,
);
await handleExport(prepareData, subgraph, argv, header);

//sort by timestamp
dataExport = sortByTimeStamp(dataExport, 'asc');

// process export
await handleExport(
dataExport,
Boolean(argv.export_csv_online),
argv.output,
`staker-reward`,
header,
);
const totalSecondsProcess = getTotalSecondProcess(startTimeProcess);
console.log(`==> Total: ${totalSecondsProcess} seconds`);
};

const getHeader = (argv: stakerRewardArgs): string[] => {
Expand Down Expand Up @@ -120,44 +106,58 @@ const getPrepareData = async (
}),
);
};
const getDataExport = async (
const handleExport = async (
prepareData: PrepareData[],
subgraph: Subgraph,
argv: stakerRewardArgs,
header: string[],
): Promise<DataExport[]> => {
// set the address to lowercase
const addresses = convertAddressesToArray(argv.staker_addresses);
const resultsPromise = prepareData.map(async (item: PrepareData) => {

const results: DataExport[] = [];

for (const item of prepareData) {
const { oasPrices, timeData } = item;
const { block, epoch, timestamp } = timeData;
console.log('RUNNING EPOCH ', epoch);

const validatorResults = await Promise.all(
addresses?.map(async (address: string) => {
const listStakerStake = await subgraph.getListStakerStake(
block,
address,
epoch,
);

// format data
const { rowData } = getAdditionalDataForStakerReward(
oasPrices,
listStakerStake,
timeData,
argv.price,
address,
);
return {
rowData,
timestamp,
};
}),
);
const startTimeProcess = Date.now();
console.log('PROCESSING WITH EPOCH', epoch);

return validatorResults;
});
const promises = addresses?.map(async (address: string) => {
const listStakerStake = await subgraph.getListStakerStake(
block,
address,
epoch,
);

const results = await Promise.all(resultsPromise);
return results.flat();
// format data
const { rowData } = getAdditionalDataForStakerReward(
oasPrices,
listStakerStake,
timeData,
argv.price,
address,
);
return {
rowData,
timestamp,
};
});

const dataExport = await Promise.all(promises);
// process export
await exportCsv(
dataExport,
Boolean(argv.export_csv_online),
argv.output,
`staker-reward`,
header,
);
results.push(...dataExport);
const totalSecondsEpoch = getTotalSecondProcess(startTimeProcess);
console.info(
`-->Export at Epoch ${epoch} took ${totalSecondsEpoch} seconds`,
);
}
return results;
};
112 changes: 56 additions & 56 deletions src/execute/executeValidatorReward.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import moment = require('moment-timezone');
import {
exportCsv,
getAdditionalDataForCommissionReward,
getEpoches,
getOasPricesForEpoch,
handleExport,
} from '../module/RewardStakes';
import {
DataExport,
Expand All @@ -13,19 +13,18 @@ import {
Verse,
validatorRewardArgs,
} from '../types';
import {
generateNumberArray,
isValidAddresses,
sortByTimeStamp,
} from '../utils';
import { generateNumberArray, isValidAddresses } from '../utils';
import { convertAddressesToArray } from '../utils/convert';
import { getTotalSecondProcess } from '../utils/date';
import {
DEFAULT_LIST_PRICE,
HEADER_FOR_VALIDATOR_REWARD,
} from '../utils/google';
import { Subgraph } from '../utils/subgraph';
import { convertAddressesToArray } from '../utils/convert';
// main process
export const main = async (argv: validatorRewardArgs) => {
const startTimeProcess = Date.now();

// validate address
const addresses = convertAddressesToArray(argv.validator_addresses);
if (!isValidAddresses(addresses)) {
Expand All @@ -49,23 +48,10 @@ export const main = async (argv: validatorRewardArgs) => {
);

// data to export
let dataExport: DataExport[] = await getDataExport(
prepareData,
subgraph,
argv,
);

//sort by timestamp
dataExport = sortByTimeStamp(dataExport, 'asc');
await handleExport(prepareData, subgraph, argv, header);

// process export
await handleExport(
dataExport,
Boolean(argv.export_csv_online),
argv.output,
'commission-reward',
header,
);
const totalSecondsProcess = getTotalSecondProcess(startTimeProcess);
console.log(`==> Total: ${totalSecondsProcess} seconds`);
};

const getHeader = (argv: validatorRewardArgs): string[] => {
Expand Down Expand Up @@ -117,47 +103,61 @@ const getPrepareData = async (
);
};

const getDataExport = async (
const handleExport = async (
prepareData: PrepareData[],
subgraph: Subgraph,
argv: validatorRewardArgs,
header: string[],
): Promise<DataExport[]> => {
// Set the address to lowercase
const validator_addresses = convertAddressesToArray(argv.validator_addresses);

const resultsPromise = prepareData.map(async (item: PrepareData) => {
const results: DataExport[] = [];

for (const item of prepareData) {
const { oasPrices, timeData } = item;
const { block, epoch, timestamp } = timeData;
console.log('RUNNING EPOCH ', epoch);

const validatorResults = await Promise.all(
validator_addresses?.map(async (address: string) => {
const validatorAddress = address;
// Get totalStake of validator
const validatorStake = await subgraph.getValidatorTotalStake(
epoch,
block,
validatorAddress,
);

// Format data
const { rowData } = getAdditionalDataForCommissionReward(
oasPrices,
validatorStake,
timeData,
argv.price,
validatorAddress,
);
return {
rowData,
timestamp,
};
}),
);
const startTimeProcess = Date.now();
console.log('PROCESSING WITH EPOCH', epoch);

return validatorResults;
});
const promises = validator_addresses.map(async (address: string) => {
const validatorAddress = address;
const validatorStake = await subgraph.getValidatorTotalStake(
epoch,
block,
validatorAddress,
);

const { rowData } = getAdditionalDataForCommissionReward(
oasPrices,
validatorStake,
timeData,
argv.price,
validatorAddress,
);

return {
rowData,
timestamp,
};
});

const dataExport = await Promise.all(promises);
//sort by timestamp

// process export
await exportCsv(
dataExport,
Boolean(argv.export_csv_online),
argv.output,
'commission-reward',
header,
);
results.push(...dataExport);
const totalSecondsEpoch = getTotalSecondProcess(startTimeProcess);
console.info(
`-->Export at Epoch ${epoch} took ${totalSecondsEpoch} seconds`,
);
}

const results = await Promise.all(resultsPromise);
return results.flat();
return results;
};
10 changes: 7 additions & 3 deletions src/module/RewardStakes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,15 @@ export const exportCsvLocal = async (
);
};

export const handleExport = async (
export const exportCsv = async (
array: any,
isOnline: boolean,
output: string,
fileName: string,
header: string[],
) => {
): Promise<boolean> => {
// console.info(`Start handle export`);

let doc: GoogleSpreadsheet;
if (isOnline) {
doc = await getSpreadSheet();
Expand All @@ -167,8 +169,10 @@ export const handleExport = async (
isOnline
? await exportCsvOnline(doc, rowData, timestamp, header)
: await exportCsvLocal(rowData, header, fileName, output);
await sleep(1500);
// await sleep(1500);
}
// console.log('Export process complete!');
return true;
};

export const getAdditionalDataForCommissionReward = (
Expand Down
4 changes: 4 additions & 0 deletions src/utils/date.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,7 @@ export const getTime = (timestamp: Date) => {
export const getMonthDate = (timestamp: Date) => {
return dateParts(timestamp).slice(0, 2).join('');
};

export const getTotalSecondProcess = (startTimeProcess: number) => {
return ((Date.now() - startTimeProcess) / 1000).toFixed(2);
};

0 comments on commit 5775341

Please sign in to comment.