Commit 6830d7cf authored by Ahmad Nemati's avatar Ahmad Nemati

init

parent 32fd810f
let fs=require('fs')
let _=require('lodash')
var shell = require('shelljs');
let prefix='work'
let cores=15
init()
async function init()
{
for (let i=0;i<cores;i++)
{
let res=await fs.existsSync(prefix+i)
if (!res) {
await fs.mkdirSync(prefix + i)
}
makeStatus(prefix + i)
}
check()
}
function makeStatus(directory) {
return new Promise(function (resolve, reject) {
fs.writeFile(directory+'/work'+'.txt', '0', 'utf8', function (err) {
if (err) reject(err);
else resolve(true);
});
});
}
async function check()
{
let files=await fs.readdirSync('files')
for (let i=0;i<files.length;i++)
{
if (!files[i].includes('csv'))
continue
let worker=await findOffWorker()
console.log(worker)
await fs.renameSync('files/'+files[i],worker+'/'+files[i])
shell.exec('node run.js '+worker, {async: true});
}
return check()
// console.log(files)
}
async function findOffWorker()
{
let arr=[]
for (let i=0;i<cores;i++)
{
let res = await fs.readFileSync('./'+prefix+i+'/work.txt', 'utf8');
if (res.includes('0'))
arr.push(prefix+i)
}
arr=_.shuffle(arr)
if (arr.length !==0)
return arr[0]
}
\ No newline at end of file
...@@ -6,10 +6,11 @@ let moment = require('moment-timezone') ...@@ -6,10 +6,11 @@ let moment = require('moment-timezone')
let ai = require('./ai') let ai = require('./ai')
async function parse(name, configs) { async function parse(directory,name, configs) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
let arr = [] let arr = []
fs.createReadStream('./work/' + name) // console.log(name)
fs.createReadStream(directory+'/' + name)
.pipe(csv.parse({headers: true})) .pipe(csv.parse({headers: true}))
.on('error', error => reject(error)) .on('error', error => reject(error))
.on('data', row => arr.push(row)) .on('data', row => arr.push(row))
......
let fs = require('fs') let fs = require('fs')
let csv = require('./csv') let csv = require('./csv')
let _ = require('lodash') let _ = require('lodash')
let directory
let csvFile
//const perf = require('execution-time')(); //const perf = require('execution-time')();
run() run()
async function run() { async function run() {
// perf.start() var args = process.argv.slice(2);
directory = args[0]
await makeStatus(directory, '1')
// perf.start()
let configs = await fs.readFileSync('./configs.json', 'utf8') let configs = await fs.readFileSync('./configs.json', 'utf8')
configs = JSON.parse(configs) configs = JSON.parse(configs)
let arr = [] let arr = []
let files = await fs.readdirSync('./work') let files = await fs.readdirSync('./' + directory)
for (let i = 0; i < files.length; i++) for (let i = 0; i < files.length; i++)
if (files[i].includes('.csv')) if (files[i].includes('.csv')) {
arr.push(csv.parse(files[i], configs.data)) csvFile = files[i]
arr.push(csv.parse(directory, files[i], configs.data))
}
arr = await Promise.all(arr) arr = await Promise.all(arr)
let count = 0 let count = 0
...@@ -25,68 +32,70 @@ async function run() { ...@@ -25,68 +32,70 @@ async function run() {
arr2.push(inline[j]) arr2.push(inline[j])
} }
} }
// console.log(arr2) // console.log(arr2)
arr2 = _.orderBy(arr2, [configs.sort], ['desc']); arr2 = _.orderBy(arr2, [configs.sort], ['desc']);
let arr20Max=[] let arr20Max = []
let arr1000Compound=[] let arr1000Compound = []
let arrReserv=_.orderBy(arr2, ['percentage'], ['asc']); let arrReserv = _.orderBy(arr2, ['percentage'], ['asc']);
let arrCompound=_.orderBy(arr2, ['compoundPerMonth'], ['desc']); let arrCompound = _.orderBy(arr2, ['compoundPerMonth'], ['desc']);
let arrResrv200=[] let arrResrv200 = []
let arrReservCompound=[] let arrReservCompound = []
for (let i = 0; i < 1000; i++) { for (let i = 0; i < 1000; i++) {
arr3.push(arr2[i]) arr3.push(arr2[i])
arrResrv200.push(arrReserv[i]) arrResrv200.push(arrReserv[i])
arr1000Compound.push(arrCompound[i]) arr1000Compound.push(arrCompound[i])
} }
for (let i=0;i<arr3.length;i++) for (let i = 0; i < arr3.length; i++) {
{
if (arr3[i].allocatedReserve < configs.alocatedReserve) if (arr3[i].allocatedReserve < configs.alocatedReserve)
arr20Max.push(arr3[i]) arr20Max.push(arr3[i])
} }
for (let i=0;i<arrCompound.length;i++) for (let i = 0; i < arrCompound.length; i++) {
{
if (arrCompound[i].allocatedReserve < configs.alocatedReserveCompound) if (arrCompound[i].allocatedReserve < configs.alocatedReserveCompound)
arrReservCompound.push(arrCompound[i]) arrReservCompound.push(arrCompound[i])
} }
// for (let i=0;i<files.length;i++) let timestamp = Date.now()
try {
await fs.mkdirSync('result/' + csvFile)
} catch (e) {
}
await fs.unlinkSync(directory + '/' + csvFile)
createfileADV('allDataSortedByProfit', JSON.stringify(arr2, null, 2))
// createfileADV('profitPerMonth1000', JSON.stringify(arr3, null, 2))
// createfileADV('percentage1000', JSON.stringify(arrResrv200, null, 2))
// createfileADV('compound1000', JSON.stringify(arr1000Compound, null, 2))
// createfileADV('allocatedReservePerMonthUnder' + configs.alocatedReserve, JSON.stringify(arr20Max, null, 2))
// createfileADV('allocatedReserveCompoundUnder' + configs.alocatedReserveCompound, JSON.stringify(arrReservCompound, null, 2))
// createfile(JSON.stringify(arr2, null, 2))
createfile2(JSON.stringify(arr3, null, 2))
// createfileADV('percentage',JSON.stringify(arrReserv, null, 2))
createfileADV('percentage1000',JSON.stringify(arrResrv200, null, 2))
createfileADV('compound1000',JSON.stringify(arr1000Compound, null, 2))
createfileADV('allocatedReservePerMonthUnder'+configs.alocatedReserve,JSON.stringify(arr20Max, null, 2))
createfileADV('allocatedReserveCompoundUnder'+configs.alocatedReserveCompound,JSON.stringify(arrReservCompound, null, 2))
// console.log(perf.stop())
console.log('Done') console.log('Done')
await makeStatus(directory, '0')
// process.exit(0) // process.exit(0)
// console.log(d) // console.log(d)
} }
function createfile(data) { function createfile(data) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
fs.writeFile('work/result.json', data, 'utf8', function (err) { fs.writeFile(directory + '/result.json', data, 'utf8', function (err) {
if (err) reject(err); if (err) reject(err);
else resolve(data); else resolve(data);
}); });
}); });
} }
function createfileADV(filename,data) { function createfileADV(filename, data) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
fs.writeFile('work/'+filename+'.json', data, 'utf8', function (err) { fs.writeFile('result/' + csvFile + '/' + filename + '.json', data, 'utf8', function (err) {
if (err) reject(err); if (err) reject(err);
else resolve(data); else resolve(data);
}); });
...@@ -96,7 +105,7 @@ function createfileADV(filename,data) { ...@@ -96,7 +105,7 @@ function createfileADV(filename,data) {
function createfile2(data) { function createfile2(data) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
fs.writeFile('work/profitPerMonth1000.json', data, 'utf8', function (err) { fs.writeFile(directory + '/profitPerMonth1000.json', data, 'utf8', function (err) {
if (err) reject(err); if (err) reject(err);
else resolve(data); else resolve(data);
}); });
...@@ -111,4 +120,14 @@ async function test2() { ...@@ -111,4 +120,14 @@ async function test2() {
} }
function makeStatus(directory, status) {
return new Promise(function (resolve, reject) {
fs.writeFile(directory + '/work' + '.txt', status, 'utf8', function (err) {
if (err) reject(err);
else resolve(true);
});
});
}
console.log(Date.now())
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment