Commit 14887235 authored by Ahmad Nemati's avatar Ahmad Nemati

init

parent 596b0de5
...@@ -98,6 +98,8 @@ let obj ...@@ -98,6 +98,8 @@ let obj
obj.maxAllocatedMoney=maxAllocatedMoney obj.maxAllocatedMoney=maxAllocatedMoney
obj.maxLevel=maxLevel obj.maxLevel=maxLevel
obj.step=step obj.step=step
obj.perReserve=Math.abs(((maxReserve * 100) / maxAllocatedMoney))
obj.perMeta=Math.abs(((maxMeta * 100) / maxAllocatedMoney))
} }
......
let fs = require('fs') var AWS = require('aws-sdk');
let _ = require('lodash') var shell = require('shelljs');
const request = require('request');
let drawDown=[30,40,50] let moment = require('moment-timezone')
let sort = 'profitPerMonth' let utils = require('./utils')
let alocatedReserve = 3 const fs = require('fs');
let alocatedReserveCompound = 3 const db = require('./../database/db')
let dir var lightsail
work()
async function work() {
var args = process.argv.slice(2);
dir = args[0]
let directory = await fs.readdirSync('last1000/'+dir)
for (let i = 0; i < directory.length; i = i + 1000) {
// console.log('hi')
let arr = []
for (let j = 0; j < 1000; j++) {
try {
if ((j + i) < directory.length)
arr.push(directory[j + i])
} catch (e) {
}
class Amazon {
constructor(account, regionParam, serverParam) {
this.region = regionParam
this.server = serverParam
}
}
async init() {
let ip = await utils.getIp()
let acc = await db.getAccByIp(ip)
var config = new AWS.Config({
accessKeyId: acc.access, secretAccessKey: acc.secret, region: this.region
});
if (arr.length !== 0) {
let timestamp = Date.now()
try {
await fs.mkdirSync('final1000/' +dir+'/'+ timestamp)
await fs.mkdirSync('final1000/' +dir+'/' + timestamp+'/default')
// for (let z=0;z<drawDown.length;z++)
// await fs.mkdirSync('final1000/' + timestamp+'/drawDown'+drawDown[z])
} catch (e) {
} lightsail = new AWS.Lightsail(config)
}
run('default','compound1000', arr, timestamp)
run('default','compound1000Start', arr, timestamp)
run('default','profitPerMonth1000', arr, timestamp)
// generateByDrawDown(timestamp,arr)
await run('default','profitPerMonth1000Start', arr, timestamp)
async getIp(proxy) {
try {
await this.deAttachStaticIp()
} catch (e) {
}
// run('profitPerMonth1000', arr, timestamp) await this.attachStaticIp(proxy.instance)
// await this.deAttachStaticIp()
// let ip = await this.getIpAddressOfInstance(proxy.instance)
// // run('percentage1000', arr, timestamp) try {
// run('compound1000', arr, timestamp) await this.doRequest(ip)
// run('profitPerMonth1000Start', arr, timestamp) } catch (e) {
// await run('compound1000Start', arr, timestamp) await this.initFirewall(proxy.instance)
// run('allocatedReservePerMonthUnder2', arr, timestamp) await this.doRequest(ip)
// await run('allocatedReserveCompoundUnder2', arr, timestamp)
} }
return ip
} }
}
async function generateByDrawDown(timestamp,arr)
{
for (let i=0;i<drawDown.length;i++)
{
run('drawDown'+drawDown[i],'compound1000DrawDown'+drawDown[i], arr, timestamp)
run('drawDown'+drawDown[i],'compound1000StartDrawDown'+drawDown[i], arr, timestamp)
run('drawDown'+drawDown[i],'profitPerMonth1000DrawDown'+drawDown[i], arr, timestamp)
await run('drawDown'+drawDown[i],'profitPerMonth1000StartDrawDown'+drawDown[i], arr, timestamp)
async createInstance(snap, nparam) {
let name
if (nparam)
name = nparam
else
name = 'Cluster' + this.randomInt(0, 500000)
await this.createInstanceFromSnashot(name, snap)
await this.sleep(15000)
// try {
// await this.initFirewall(name)
// }
// catch (e) {
//
// }
let ip
try {
ip = await this.getIpAddressOfInstance(name)
} catch (e) {
}
// await this.doRequest(ip)
//await rebootInstance(name)
return {name: name, ip: ip}
} }
}
async function run(root,name, directory, timestamp) { sleep(millis) {
// let directory = await fs.readdirSync('last1000') return new Promise(resolve => setTimeout(resolve, millis));
let arr2 = []
let arrFinal = []
let last = []
// console.log(directory)
for (let f = 0; f < directory.length; f++) {
if (typeof directory[f] === "undefined")
continue
console.log(directory[f])
arrFinal.push(readFile(root,name, directory[f]))
} }
arrFinal = await Promise.all(arrFinal) attachStaticIp(instance) {
let ipname = 'StaticIp-1'
return new Promise(function (resolve, reject) {
lightsail.attachStaticIp({staticIpName: ipname, instanceName: instance}
, function (error, data) {
if (error) {
console.log(error)
reject('Error attachStaticIp')
}
if (data)
resolve(true)
});
});
}
deAttachStaticIp() {
let ipname = 'StaticIp-1'
return new Promise(function (resolve, reject) {
for (let i = 0; i < arrFinal.length; i++) {
let inline = arrFinal[i]
// console.log(inline)
lightsail.detachStaticIp({staticIpName: ipname}, function (error, data) {
if (error) {
reject('Error deAttachStaticIp')
}
for (let z = 0; z < inline.length; z++) if (data)
arr2.push(inline[z]) resolve(true)
})
});
} }
// console.log(arr2) releaseStaticIp(name) {
let t=name.toLowerCase()
if (t.includes('per') || name === 'profitPerMonth1000' || name === 'allocatedReservePerMonthUnder3' || name === 'allocatedReservePerMonthUnder2' || name === 'profitPerMonth1000Start')
last = _.orderBy(arr2, ['profitPerMonthDrawDown'], ['desc']); return new Promise(function (resolve, reject) {
var params = {
staticIpName: name /* required */
};
lightsail.releaseStaticIp(params
, function (error, data) {
if (error)
reject('Error releaseStaticIp')
if (data)
resolve(true)
});
// if (name === 'percentage1000') });
// last = _.orderBy(arr2, ['percentage'], ['asc']); }
createSnapshutFromInstace() {
return new Promise(function (resolve, reject) {
if (t.includes('compound') || name === 'compound1000' || name === 'allocatedReserveCompoundUnder3' || name === 'allocatedReserveCompoundUnder2' || name === 'compound1000Start') var params = {
last = _.orderBy(arr2, ['CompoundPerMonthDrawDown'], ['desc']); instanceName: 'Ubuntu-1', /* required */
instanceSnapshotName: 'snapx', /* required */
};
lightsail.createInstanceSnapshot(params, function (err, data) {
if (err)
reject('Error create snapx')
if (data)
resolve(true)
});
let las = [] });
for (let i = 0; i < 1000; i++) {
if (i < last.length)
las.push(last[i])
} }
createfileADV(root,timestamp, name, JSON.stringify(las, null, 2)) createStaticIp(name) {
last = []
}
return new Promise(function (resolve, reject) {
async function readFile(root,name, directory) { var params = {
let sortByProfit = [] staticIpName: name /* required */
let file = await fs.readFileSync('./last1000/'+dir+'/' + directory + '/'+root+'/' + name + '.json', 'utf8') };
file = JSON.parse(file) lightsail.allocateStaticIp(params
, function (error, data) {
if (error) {
console.log(error)
reject('Error createStaticIp')
}
// file = _.orderBy(file, sort, ['desc']); if (data)
for (let j = 0; j < file.length; j++) { resolve(data)
});
sortByProfit.push(file[j]) });
} }
getAllInstances() {
return new Promise(function (resolve, reject) {
return file
}
function createfileADV(root,timestamp, filename, data) { lightsail.getInstances(function (error, data) {
return new Promise(function (resolve, reject) { if (error) {
fs.writeFile('final1000/'+dir+'/' + timestamp + '/'+root+'/' + filename + '.json', data, 'utf8', function (err) { console.log(error)
if (err) reject(err); reject('Error getAllInstances')
else resolve(data); }
if (data)
resolve(data.instances)
})
});
}
getAllIps() {
return new Promise(function (resolve, reject) {
lightsail.getStaticIps(function (error, data) {
if (error)
reject('Error getAllIps')
if (data)
resolve(data.staticIps)
})
});
}
rebootInstance(proxy) {
return new Promise(function (resolve, reject) {
lightsail.rebootInstance({instanceName: proxy.instance}, function (error, data) {
if (error) {
console.log(error)
resolve(false)
}
if (data)
resolve(true)
})
});
}
getIpAddressOfInstance(instance) {
return new Promise(function (resolve, reject) {
lightsail.getInstance({instanceName: instance}, function (error, data) {
if (error) {
console.log(error)
reject('Error getIpAddressOfInstance')
}
if (data)
resolve(data.instance.publicIpAddress)
});
});
}
deleteInstance(instance) {
var params = {
instanceName: instance /* required */
};
return new Promise(function (resolve, reject) {
lightsail.deleteInstance(params, function (error, data) {
if (error)
reject('Error deleteInstance')
if (data)
resolve(data)
});
});
}
getInstance(instance) {
return new Promise(function (resolve, reject) {
lightsail.getInstance({instanceName: instance}, function (error, data) {
if (error)
reject('Error getInstance')
if (data)
resolve(data.instance)
});
}); });
}); }
}
\ No newline at end of file initFirewall(instance) {
return new Promise(function (resolve, reject) {
var params = {
instanceName: instance,
portInfos: [
{
fromPort: 0,
protocol: 'all',
toPort: 65535
},
]
};
lightsail.putInstancePublicPorts(params, function (error, data) {
if (error) {
console.log(error)
reject('Error putInstancePublicPorts')
}
if (data)
resolve(data)
});
});
}
copySnapShut(snap, region) {
return new Promise(function (resolve, reject) {
var params = {
sourceRegion: region,
targetSnapshotName: snap,
sourceSnapshotName: snap,
};
lightsail.copySnapshot(params, function (error, data) {
if (error) {
console.log(error)
reject('Error copySnapshot')
}
if (data)
resolve(data)
});
});
}
getInstanceOpenPort(instance) {
return new Promise(function (resolve, reject) {
lightsail.getInstancePortStates({instanceName: instance}, function (error, data) {
if (error)
reject(error)
if (data)
resolve(data)
});
});
}
createInstanceFromSnashot(instanceName, snap) {
let reg = this.region
let server = this.server
return new Promise(function (resolve, reject) {
var params = {
availabilityZone: reg + 'a', /* required */
bundleId: server, /* required */
instanceNames: [instanceName],
instanceSnapshotName: snap, /* required */
};
lightsail.createInstancesFromSnapshot(params, function (error, data) {
if (error) {
console.log(error)
reject('Error createInstancesFromSnapshot')
}
if (data)
resolve(data)
});
});
}
createInstanceFromNormalWay() {
let reg = this.region
let server = 'large_2_0'
let command = " cd /home/ubuntu && " +
" git clone http://49.12.200.60/root/mt2oldAmazon.git" +
" && mv mt2oldAmazon mt" +
" && cd mt && chmod 777 " +
"* && ./install.sh && cd .." +
" && git clone http://49.12.200.60/root/rt2old.git " +
"&& mv rt2old rt2 && " +
"cd rt2 && chmod" +
" 777 * && ./run.sh && " +
"sudo pm2 start app.js && " +
"sudo pm2 startup && "
+ "sudo pm2 save && " +
"sleep 5 && reboot"
return new Promise(function (resolve, reject) {
var params = {
availabilityZone: reg + 'a', /* required */
blueprintId: 'ubuntu_18_04', /* required */
bundleId: 'large_2_0', /* required */
instanceNames: [ /* required */
'Ubuntu-1',
'Ubuntu-2'
],
userData: command
};
if (reg === 'eu-north-1')
params.bundleId = 'large_2_3'
lightsail.createInstances(params, function (error, data) {
if (error) {
console.log(error)
reject('Error createInstancesFromNormalWay')
}
if (data) {
console.log(data)
resolve(data)
}
});
});
}
async foundInstance(meta) {
let instance = await this.getAllInstances()
for (let i = 0; i < instance.length; i++) {
if (instance[i].name === meta) {
return {found: true, createdAt: instance[i].createdAt}
}
}
return {found: false}
}
async foundNormalInstance(meta) {
let instance = await this.getAllInstances()
for (let i = 0; i < instance.length; i++) {
if (instance[i].name === meta) {
return true
}
}
return false
}
async getDaysCreate(meta) {
let instance = await this.getAllInstances()
for (let i = 0; i < instance.length; i++) {
if (instance[i].name === meta)
return this.getMinDays(instance[i].createdAt)
}
return false
}
getMinDays(end) {
var now = moment(moment().tz('Asia/Tehran').format());
var end = moment.duration(now.diff(moment(end).tz('Asia/Tehran')));
return parseInt(end.asDays())
}
async isIpAlive(ip) {
let a = await shell.exec('ping ' + ip + ' -c 3', {silent: true}).stdout;
a = a.split(',')[2].split('%')[0]
a = parseInt(a)
return a <= 30
}
randomInt(low, high) {
return Math.floor(Math.random() * (high - low) + low)
}
doRequest(ip) {
let url = 'http://' + ip + ':3000'
return new Promise(function (resolve, reject) {
request(url, {timeout: 6000}, function (error, res, body) {
try {
if (!error && res.statusCode === 200) {
resolve(body);
} else {
reject(error);
}
} catch (e) {
reject('Error Request');
}
});
});
}
}
module.exports = Amazon;
\ 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