Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop
No files matched your search
@@ -3,6 +3,7 @@ Log-Files
|
||||
My-Workspaces
|
||||
My-Social-Trading-Data
|
||||
My-Network-Nodes-Data
|
||||
My-Secrets
|
||||
debug.log
|
||||
.DS_Store
|
||||
*.db
|
||||
|
||||
@@ -45,7 +45,7 @@ exports.newDesktopApp = function newDesktopApp() {
|
||||
*/
|
||||
queryMessage = {
|
||||
queryType: SA.projects.socialTrading.globals.queryTypes.USER_PROFILES,
|
||||
emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID,
|
||||
emitterUserProfileId: SA.secrets.map.get('Social Trading Desktop').userProfileId,
|
||||
initialIndex: 'Last',
|
||||
amountRequested: 10,
|
||||
direction: 'Past'
|
||||
@@ -74,7 +74,7 @@ exports.newDesktopApp = function newDesktopApp() {
|
||||
let eventMessage = {
|
||||
eventId: SA.projects.foundations.utilities.miscellaneousFunctions.genereteUniqueId(),
|
||||
eventType: SA.projects.socialTrading.globals.eventTypes.FOLLOW_USER_PROFILE,
|
||||
emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID,
|
||||
emitterUserProfileId: SA.secrets.map.get('Social Trading Desktop').userProfileId,
|
||||
targetUserProfileId: profile.userProfileId
|
||||
}
|
||||
|
||||
@@ -99,8 +99,8 @@ exports.newDesktopApp = function newDesktopApp() {
|
||||
*/
|
||||
queryMessage = {
|
||||
queryType: SA.projects.socialTrading.globals.queryTypes.USER_PROFILE_STATS,
|
||||
emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID,
|
||||
targetUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID
|
||||
emitterUserProfileId: SA.secrets.map.get('Social Trading Desktop').userProfileId,
|
||||
targetUserProfileId: SA.secrets.map.get('Social Trading Desktop').userProfileId
|
||||
}
|
||||
|
||||
query = {
|
||||
|
||||
@@ -53,17 +53,16 @@ exports.newDesktopRoot = function newDesktopRoot() {
|
||||
}
|
||||
|
||||
/*
|
||||
We will use this User Profile for Testing Purposes.
|
||||
{
|
||||
"githubUsername": "Test-Network-Client-Profile",
|
||||
"address": "0xA0dCDA81b42C5EBDc45EC2875C72274B67560246",
|
||||
"privateKey": "0x5fed4817a87431c8a328d0936561e63f45b6db289adac6125b9306ded644dfe9"
|
||||
}
|
||||
Setting up Secrets.
|
||||
*/
|
||||
|
||||
DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID = "baa2f02c-2920-4edb-a103-d452fc61d82f"
|
||||
DK.TEST_NETWORK_CLIENT_USER_PROFILE_HANDLE = "Test-Network-Client-Profile"
|
||||
DK.TEST_NETWORK_CLIENT_USER_PROFILE_PRIVATE_KEY = "0x5fed4817a87431c8a328d0936561e63f45b6db289adac6125b9306ded644dfe9"
|
||||
SA.secrets = {
|
||||
array: require('./My-Secrets/Secrets.json'),
|
||||
map: new Map()
|
||||
}
|
||||
for (let i = 0; i < SA.secrets.array.length; i++) {
|
||||
let secret = SA.secrets.array[i]
|
||||
SA.secrets.map.set (secret.codeName, secret)
|
||||
}
|
||||
|
||||
run()
|
||||
|
||||
|
||||
@@ -48,17 +48,17 @@ exports.newNetworkRoot = function newNetworkRoot() {
|
||||
ws: require('ws'),
|
||||
simpleGit: require('simple-git')
|
||||
}
|
||||
|
||||
/*
|
||||
We will use this User Profile for testing purposes.
|
||||
{
|
||||
"githubUsername": "Test-Network-Node-Profile",
|
||||
"address": "0xa153469c57A91F5a59Fc6c45A37aD8dbad85e417",
|
||||
"privateKey": "0xac498ae59407e6b68429a814f64da2339550f93a767578e28c161ff119159271"
|
||||
}
|
||||
Setting up Secrets.
|
||||
*/
|
||||
NT.NETWORK_NODE_USER_PROFILE_HANDLE = "Test-Network-Node-Profile"
|
||||
NT.NETWORK_NODE_USER_PROFILE_PRIVATE_KEY = "0xac498ae59407e6b68429a814f64da2339550f93a767578e28c161ff119159271"
|
||||
SA.secrets = {
|
||||
array: require('./My-Secrets/Secrets.json'),
|
||||
map: new Map()
|
||||
}
|
||||
for (let i = 0; i < SA.secrets.array.length; i++) {
|
||||
let secret = SA.secrets.array[i]
|
||||
SA.secrets.map.set(secret.codeName, secret)
|
||||
}
|
||||
|
||||
NT.app = require('./Network/NetwokNode.js').newNetworkNode()
|
||||
NT.app.run()
|
||||
|
||||
@@ -301,9 +301,11 @@ exports.newGithubServer = function newGithubServer() {
|
||||
if (await validateFileNameEqualsGithubUsername() === false) { continue }
|
||||
if (await validateFileChangedIsUserProfile() === false) { continue }
|
||||
if (await validateMessageSignedIsGithubUsername() === false) { continue }
|
||||
if (await validateMessageSignedHashIsSignatureHash() === false) { continue }
|
||||
if (await validateUserProfileNodeNameEqualsGithubUsername() === false) { continue }
|
||||
if (await validateUserProfileIdDoesNotBelongtoAnotherUserProfile() === false) { continue }
|
||||
if (await validateUserProfileBlockchainAccountDoesNotBelongtoAnotherUserProfile() === false) { continue }
|
||||
if (await validateUserProfileSigningAccountsDoesNotBelongtoAnotherUserProfile() === false) { continue }
|
||||
|
||||
if (await mergePullRequest() === false) {
|
||||
console.log('[WARN] Github Server -> mergeGithubPullRequests -> Merge Failed -> Pull Request "' + pullRequest.title + '" not merged because Github could not merge it. -> mergeResponse.message = ' + mergeResponse.data.message)
|
||||
@@ -440,12 +442,46 @@ exports.newGithubServer = function newGithubServer() {
|
||||
}
|
||||
}
|
||||
|
||||
async function validateMessageSignedHashIsSignatureHash() {
|
||||
/*
|
||||
Validation #5: The message signed has is equal to the signature messageHash.
|
||||
*/
|
||||
let config = JSON.parse(userProfile.config)
|
||||
|
||||
let serverResponse = await PL.servers.WEB3_SERVER.hashData(
|
||||
config.signature.message
|
||||
)
|
||||
let messageSignedHash = serverResponse.hash
|
||||
let signatureHash = config.signature.messageHash
|
||||
|
||||
if (messageSignedHash !== signatureHash) {
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #5 Failed -> Pull Request "' + pullRequest.title + '" not merged because the Message Signed Hash is not equal to the the Signature Hash. -> messageSignedHash = ' + messageSignedHash + '-> signatureHash = ' + signatureHash)
|
||||
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.issues.createComment({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
issue_number: pullRequest.number,
|
||||
body: 'This Pull Request could not be automatically merged and was closed by the Superalgos Governance System because the Message Signed Hash is not equal to the the Signature Hash.\n\n messageSignedHash = "' + messageSignedHash + '"\n\n signatureHash = "' + signatureHash + '"'
|
||||
});
|
||||
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.pulls.update({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
pull_number: pullRequest.number,
|
||||
state: 'closed'
|
||||
});
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
async function validateUserProfileNodeNameEqualsGithubUsername() {
|
||||
/*
|
||||
Validation #5: The name of the User Profile node is not the Github Username.
|
||||
Validation #6: The name of the User Profile node is not the Github Username.
|
||||
*/
|
||||
if (userProfile.name !== githubUsername) {
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #5 Failed -> Pull Request "' + pullRequest.title + '" not merged because the Github Username is not equal to the User Profile node\'s name. -> Github Username = ' + githubUsername + '-> userProfile.name = ' + userProfile.name)
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #6 Failed -> Pull Request "' + pullRequest.title + '" not merged because the Github Username is not equal to the User Profile node\'s name. -> Github Username = ' + githubUsername + '-> userProfile.name = ' + userProfile.name)
|
||||
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.issues.createComment({
|
||||
@@ -468,7 +504,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
|
||||
async function validateUserProfileIdDoesNotBelongtoAnotherUserProfile() {
|
||||
/*
|
||||
Validation #6: The id of the User Profile can not be the id of an already existing User Profile
|
||||
Validation #7: The id of the User Profile can not be the id of an already existing User Profile
|
||||
unless the existing one belongs to the same Github username.
|
||||
*/
|
||||
let userProfileIdMap = new Map()
|
||||
@@ -493,7 +529,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
if (testUserProfile === undefined) { return true }
|
||||
if (testUserProfile !== userProfile.name) {
|
||||
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #6 Failed -> Pull Request "' + pullRequest.title + '" not merged because the User Profile Id already exists and belongs to another User Profile on record. -> Profile Id = ' + userProfile.id + '-> User Profile with the same Id = ' + testUserProfile)
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #7 Failed -> Pull Request "' + pullRequest.title + '" not merged because the User Profile Id already exists and belongs to another User Profile on record. -> Profile Id = ' + userProfile.id + '-> User Profile with the same Id = ' + testUserProfile)
|
||||
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.issues.createComment({
|
||||
@@ -517,7 +553,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
async function validateUserProfileBlockchainAccountDoesNotBelongtoAnotherUserProfile() {
|
||||
try {
|
||||
/*
|
||||
Validation #7 The blockchain account of the User Profile can not be the
|
||||
Validation #8 The blockchain account of the User Profile can not be the
|
||||
blockchain account of an already existing User Profile
|
||||
unless the existing one belongs to the same Github username.
|
||||
*/
|
||||
@@ -554,7 +590,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
if (testUserProfile === undefined) { return true }
|
||||
if (testUserProfile !== userProfile.name) {
|
||||
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #7 Failed -> Pull Request "' + pullRequest.title + '" not merged because the User Profile Blockchain Account already exists and belongs to another User Profile on record. -> Profile Blockchain Account = ' + serverResponse.address + '-> User Profile with the same Blockchain Account = ' + testUserProfile)
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #8 Failed -> Pull Request "' + pullRequest.title + '" not merged because the User Profile Blockchain Account already exists and belongs to another User Profile on record. -> Profile Blockchain Account = ' + serverResponse.address + '-> User Profile with the same Blockchain Account = ' + testUserProfile)
|
||||
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.issues.createComment({
|
||||
@@ -578,6 +614,77 @@ exports.newGithubServer = function newGithubServer() {
|
||||
}
|
||||
}
|
||||
|
||||
async function validateUserProfileSigningAccountsDoesNotBelongtoAnotherUserProfile() {
|
||||
try {
|
||||
|
||||
if (userProfile.signingAccounts === undefined) { return true }
|
||||
|
||||
for (let i = 0; i < userProfile.signingAccounts.signingAccounts.length; i++) {
|
||||
let signingAccount = userProfile.signingAccounts.signingAccounts[i]
|
||||
let config = JSON.parse(signingAccount.config)
|
||||
/*
|
||||
Validation #9 Signing accounts of the User Profile
|
||||
must have a signature of the same Github username of the User Profile.
|
||||
*/
|
||||
let messageSigned = config.signature.message
|
||||
|
||||
if (messageSigned !== githubUsername) {
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #9 Failed -> Pull Request "' + pullRequest.title + '" not merged because the Signing Account ' + signingAccount.name + ' has not signed the current Github User Account, but something else. -> messageSigned = ' + messageSigned + '-> githubUsername = ' + githubUsername)
|
||||
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.issues.createComment({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
issue_number: pullRequest.number,
|
||||
body: 'This Pull Request could not be automatically merged and was closed by the Superalgos Governance System because the Signing Account "' + signingAccount.name + '" has not signed the current Github User Account, but something else. \n\n messageSigned = "' + messageSigned + '" \n\n githubUsername = "' + githubUsername + '"'
|
||||
});
|
||||
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.pulls.update({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
pull_number: pullRequest.number,
|
||||
state: 'closed'
|
||||
});
|
||||
return false
|
||||
}
|
||||
/*
|
||||
Validation #10: The message signed has is equal to the signature messageHash.
|
||||
*/
|
||||
let serverResponse = await PL.servers.WEB3_SERVER.hashData(
|
||||
config.signature.message
|
||||
)
|
||||
let messageSignedHash = serverResponse.hash
|
||||
let signatureHash = config.signature.messageHash
|
||||
|
||||
if (messageSignedHash !== signatureHash) {
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #10 Failed -> Pull Request "' + pullRequest.title + '" not merged because the Message Signed Hash is not equal to the the Signature Hash. -> messageSignedHash = ' + messageSignedHash + '-> signatureHash = ' + signatureHash)
|
||||
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.issues.createComment({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
issue_number: pullRequest.number,
|
||||
body: 'This Pull Request could not be automatically merged and was closed by the Superalgos Governance System because the Message Signed Hash is not equal to the the Signature Hash.\n\n messageSignedHash = "' + messageSignedHash + '"\n\n signatureHash = "' + signatureHash + '"'
|
||||
});
|
||||
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.pulls.update({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
pull_number: pullRequest.number,
|
||||
state: 'closed'
|
||||
});
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
} catch (err) {
|
||||
console.log(err.stack)
|
||||
}
|
||||
}
|
||||
|
||||
async function mergePullRequest() {
|
||||
/*
|
||||
All validations passed, we will proceed an merge this Pull Request.
|
||||
|
||||
@@ -93,6 +93,15 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse)
|
||||
return
|
||||
}
|
||||
case 'hashData': {
|
||||
|
||||
let serverResponse = await PL.servers.WEB3_SERVER.hashData(
|
||||
params.data
|
||||
)
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse)
|
||||
return
|
||||
}
|
||||
case 'recoverAddress': {
|
||||
|
||||
let serverResponse = await PL.servers.WEB3_SERVER.recoverAddress(
|
||||
@@ -1058,6 +1067,15 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
)
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse)
|
||||
|
||||
setInterval(
|
||||
PL.servers.GITHUB_SERVER.mergePullRequests,
|
||||
60000,
|
||||
params.commitMessage,
|
||||
params.username,
|
||||
params.token
|
||||
)
|
||||
|
||||
return
|
||||
}
|
||||
case 'payContributors': {
|
||||
|
||||
@@ -7,6 +7,7 @@ exports.newWeb3Server = function newWeb3Server() {
|
||||
createWalletAccount: createWalletAccount,
|
||||
getWalletBalances: getWalletBalances,
|
||||
signData: signData,
|
||||
hashData: hashData,
|
||||
recoverAddress: recoverAddress,
|
||||
mnemonicToPrivateKey: mnemonicToPrivateKey,
|
||||
payContributors: payContributors,
|
||||
@@ -223,6 +224,22 @@ exports.newWeb3Server = function newWeb3Server() {
|
||||
}
|
||||
}
|
||||
|
||||
async function hashData(data) {
|
||||
try {
|
||||
|
||||
let web3 = new Web3()
|
||||
let hash = web3.eth.accounts.hashMessage(data)
|
||||
|
||||
return {
|
||||
hash: hash,
|
||||
result: 'Ok'
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
return { error: 'Could not hash the data. ' + err.stack }
|
||||
}
|
||||
}
|
||||
|
||||
async function recoverAddress(signature) {
|
||||
try {
|
||||
let signatureObject = JSON.parse(signature)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
let postLoader
|
||||
|
||||
function newAppLoader() {
|
||||
const MODULE_NAME = 'App Loader'
|
||||
const INFO_LOG = false
|
||||
const ERROR_LOG = true
|
||||
const logger = newWebDebugLog()
|
||||
@@ -65,8 +64,8 @@ function newAppLoader() {
|
||||
for (let i = 0; i < fileArray.length; i++) {
|
||||
let item = fileArray[i]
|
||||
|
||||
project = item[0]
|
||||
fileName = item[1]
|
||||
let project = item[0]
|
||||
let fileName = item[1]
|
||||
urlArray.push('Projects' + '/' + project + '/' + 'UI' + '/' + 'Function-Libraries' + '/' + fileName)
|
||||
}
|
||||
|
||||
@@ -85,8 +84,8 @@ function newAppLoader() {
|
||||
for (let i = 0; i < fileArray.length; i++) {
|
||||
let item = fileArray[i]
|
||||
|
||||
project = item[0]
|
||||
fileName = item[1]
|
||||
let project = item[0]
|
||||
let fileName = item[1]
|
||||
urlArray.push('Projects' + '/' + project + '/' + 'UI' + '/' + 'Utilities' + '/' + fileName)
|
||||
}
|
||||
|
||||
@@ -105,8 +104,8 @@ function newAppLoader() {
|
||||
for (let i = 0; i < fileArray.length; i++) {
|
||||
let item = fileArray[i]
|
||||
|
||||
project = item[0]
|
||||
fileName = item[1]
|
||||
let project = item[0]
|
||||
let fileName = item[1]
|
||||
urlArray.push('Projects' + '/' + project + '/' + 'UI' + '/' + 'Globals' + '/' + fileName)
|
||||
}
|
||||
|
||||
@@ -138,7 +137,7 @@ function newAppLoader() {
|
||||
|
||||
for (let i = 0; i < modulesArray.length; i++) {
|
||||
let path = modulesArray[i]
|
||||
console.log(path)
|
||||
|
||||
REQUIREJS([path], onRequired)
|
||||
|
||||
if (INFO_LOG === true) { logger.write('[INFO] loadModules -> Module Requested.') }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
function newEventsServerClient(networkNode) {
|
||||
function newEventsServerClient(lanNetworkNode) {
|
||||
/* Web Sockets Connection */
|
||||
|
||||
const MODULE_NAME = 'System Event Handler'
|
||||
@@ -192,19 +192,19 @@ function newEventsServerClient(networkNode) {
|
||||
|
||||
if (thisObject.isConnected() !== true) {
|
||||
if (lastTryToReconnectDatetime !== undefined) {
|
||||
if (networkNode !== undefined) {
|
||||
if (networkNode.payload !== undefined) {
|
||||
if (networkNode.payload.uiObject !== undefined) {
|
||||
networkNode.payload.uiObject.setErrorMessage('Failed to Connect to Superalgos Platform Client via WebSockets. Retrying in 1 minute. Check at this node config if the host property has the IP address of the computer running Superalgos Platform Client.')
|
||||
if (lanNetworkNode !== undefined) {
|
||||
if (lanNetworkNode.payload !== undefined) {
|
||||
if (lanNetworkNode.payload.uiObject !== undefined) {
|
||||
lanNetworkNode.payload.uiObject.setErrorMessage('Failed to Connect to Superalgos Platform Client via WebSockets. Retrying in 1 minute. Check at this node config if the host property has the IP address of the computer running Superalgos Platform Client.')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (networkNode !== undefined) {
|
||||
if (networkNode.payload !== undefined) {
|
||||
if (networkNode.payload.uiObject !== undefined) {
|
||||
networkNode.payload.uiObject.setStatus('Connected to Superalgos Platform Client via WebSockets.')
|
||||
if (lanNetworkNode !== undefined) {
|
||||
if (lanNetworkNode.payload !== undefined) {
|
||||
if (lanNetworkNode.payload.uiObject !== undefined) {
|
||||
lanNetworkNode.payload.uiObject.setStatus('Connected to Superalgos Platform Client via WebSockets.')
|
||||
retryCommandsPhysics()
|
||||
}
|
||||
}
|
||||
@@ -220,14 +220,14 @@ function newEventsServerClient(networkNode) {
|
||||
let port
|
||||
/* At this point the node does not have the payload property yet, that is why we have to do this manually */
|
||||
try {
|
||||
let config = JSON.parse(networkNode.config)
|
||||
let config = JSON.parse(lanNetworkNode.config)
|
||||
host = config.host
|
||||
port = config.webSocketsPort
|
||||
|
||||
/* Check if we really have to stablish the connection. */
|
||||
if (config.autoConnect === false) { return }
|
||||
} catch (err) {
|
||||
networkNode.payload.uiObject.setErrorMessage(
|
||||
lanNetworkNode.payload.uiObject.setErrorMessage(
|
||||
'Bad configuration. Invalid JSON Format.',
|
||||
undefined,
|
||||
{
|
||||
@@ -241,7 +241,7 @@ function newEventsServerClient(networkNode) {
|
||||
}
|
||||
|
||||
if (host === undefined) {
|
||||
networkNode.payload.uiObject.setErrorMessage(
|
||||
lanNetworkNode.payload.uiObject.setErrorMessage(
|
||||
'Bad configuration. Host Property Not Found.',
|
||||
undefined,
|
||||
{
|
||||
@@ -255,7 +255,7 @@ function newEventsServerClient(networkNode) {
|
||||
}
|
||||
|
||||
if (port === undefined) {
|
||||
networkNode.payload.uiObject.setErrorMessage(
|
||||
lanNetworkNode.payload.uiObject.setErrorMessage(
|
||||
'Bad configuration. WebSocketsPort Property Not Found.',
|
||||
undefined,
|
||||
{
|
||||
|
||||
@@ -98,6 +98,9 @@ function newUniqueId () {
|
||||
|
||||
function splitTextIntoPhrases (text, wordsPerLine) {
|
||||
try {
|
||||
if (text.split === undefined) {
|
||||
return []
|
||||
}
|
||||
let splittedLabel = text.split(' ')
|
||||
let phrases = []
|
||||
let phrase = ''
|
||||
|
||||
@@ -50,6 +50,7 @@ function newEducationTutorialSpace() {
|
||||
let tutorialFormDiv = document.getElementById('tutorialFormDiv')
|
||||
let htmlGif = document.createElement("IMG")
|
||||
let htmlImage = document.createElement("IMG")
|
||||
//let htmlVid = document.createElement("iframe")
|
||||
|
||||
let currentGifName
|
||||
let newGifName
|
||||
@@ -158,14 +159,13 @@ function newEducationTutorialSpace() {
|
||||
switch (currentStatus) {
|
||||
case 'Stopped': {
|
||||
makeInvisible()
|
||||
//thisObject.sidePanelTab.close()
|
||||
thisObject.sidePanelTab.close()
|
||||
currentNode = undefined
|
||||
break
|
||||
}
|
||||
case 'Playing Tutorial': {
|
||||
makeVsible()
|
||||
// Animation Caused the advance() function to be called skipping the first tutorial step commented out until better implementation can be added
|
||||
//thisObject.sidePanelTab.open()
|
||||
thisObject.sidePanelTab.open()
|
||||
break
|
||||
}
|
||||
case 'Playing Topic': {
|
||||
@@ -183,6 +183,7 @@ function newEducationTutorialSpace() {
|
||||
checkPressButton()
|
||||
checkGif()
|
||||
checkImage()
|
||||
//checkVid()
|
||||
checkDocumentation()
|
||||
checkWorkspaces()
|
||||
checkSlider()
|
||||
@@ -327,6 +328,17 @@ function newEducationTutorialSpace() {
|
||||
}
|
||||
}
|
||||
|
||||
function checkVid() {
|
||||
let tutorialGifDiv = document.getElementById('tutorialGifDiv')
|
||||
if (tutorialGifDiv !== null && tutorialGifDiv !== undefined) {
|
||||
tutorialGifDiv.appendChild(htmlGif)
|
||||
}
|
||||
|
||||
if (currentGifName === newGifName) { return }
|
||||
currentGifName = newGifName
|
||||
htmlVid.src = currentGifName
|
||||
}
|
||||
|
||||
function checkDocumentation() {
|
||||
if (currentNode === undefined) { return }
|
||||
let config = JSON.parse(currentNode.config)
|
||||
@@ -995,7 +1007,7 @@ function newEducationTutorialSpace() {
|
||||
function resumeTutorial(node) {
|
||||
if (UI.projects.foundations.spaces.designSpace.workspace.isInitialized !== true) { return }
|
||||
//Testing if removing the navigationStack reset here fixes the tutorial resume issues
|
||||
//navigationStack = []
|
||||
navigationStack = []
|
||||
node.payload.uiObject.isPlaying = true
|
||||
tutorialRootNode = node
|
||||
currentNode = node
|
||||
@@ -1017,7 +1029,7 @@ function newEducationTutorialSpace() {
|
||||
|
||||
function resumeTutorialTopic(node) {
|
||||
//Testing if removing the navigationStack reset here fixes the tutorial resume issues
|
||||
//navigationStack = []
|
||||
navigationStack = []
|
||||
currentTopicNode = node
|
||||
currentNode = node
|
||||
currentStatus = 'Playing Topic'
|
||||
@@ -1038,7 +1050,7 @@ function newEducationTutorialSpace() {
|
||||
|
||||
function resumeTutorialStep(node) {
|
||||
//Testing if removing the navigationStack reset here fixes the tutorial resume issues
|
||||
//navigationStack = []
|
||||
navigationStack = []
|
||||
currentStepNode = node
|
||||
currentNode = node
|
||||
currentStatus = 'Playing Step'
|
||||
@@ -1433,6 +1445,13 @@ function newEducationTutorialSpace() {
|
||||
newGifName = text
|
||||
break
|
||||
}
|
||||
case 'Youtube': {
|
||||
let text = UI.projects.education.utilities.docs.getTextBasedOnLanguage(paragraph)
|
||||
let src = UI.projects.education.utilities.docs.parseYoutube(text)
|
||||
console.log('text', src)
|
||||
html = html + '<iframe width="400" height="215" src="https://www.youtube.com/embed/' + text + '" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'
|
||||
break
|
||||
}
|
||||
case 'Text': {
|
||||
let text = UI.projects.education.utilities.docs.getTextBasedOnLanguage(paragraph)
|
||||
text = UI.projects.education.utilities.docs.addKeyboard(text)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
}
|
||||
],
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Network Node->"
|
||||
"compatibleTypes": "->LAN Network Node->"
|
||||
},
|
||||
"editors": {
|
||||
"config": true
|
||||
|
||||
@@ -42,8 +42,8 @@ function newEthereumUtilitiesRouteToClient() {
|
||||
return
|
||||
}
|
||||
|
||||
let networkNodeConfig = JSON.parse(networkClient.payload.referenceParent.config)
|
||||
let url = 'http://' + networkNodeConfig.host + ':' + networkNodeConfig.webPort + '/' + 'WEB3'
|
||||
let lanNetworkNodeConfig = JSON.parse(networkClient.payload.referenceParent.config)
|
||||
let url = 'http://' + lanNetworkNodeConfig.host + ':' + lanNetworkNodeConfig.webPort + '/' + 'WEB3'
|
||||
|
||||
return {
|
||||
params: params,
|
||||
|
||||
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
@@ -4,12 +4,12 @@
|
||||
"config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}",
|
||||
"rootNodes": [
|
||||
{
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"project": "Foundations",
|
||||
"networkNodes": [
|
||||
"lanNetworkNodes": [
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"name": "My Computer",
|
||||
"config": "{\n \"host\": \"localhost\",\n \"webPort\": \"34248\",\n \"webSocketsPort\": \"18041\"\n}",
|
||||
"project": "Foundations",
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}",
|
||||
"rootNodes": [
|
||||
{
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"project": "Foundations",
|
||||
"networkNodes": [
|
||||
"lanNetworkNodes": [
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"name": "My Computer",
|
||||
"config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}",
|
||||
"project": "Foundations",
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}",
|
||||
"rootNodes": [
|
||||
{
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"project": "Foundations",
|
||||
"networkNodes": [
|
||||
"lanNetworkNodes": [
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"name": "My Computer",
|
||||
"config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}",
|
||||
"project": "Foundations",
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}",
|
||||
"rootNodes": [
|
||||
{
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"project": "Foundations",
|
||||
"networkNodes": [
|
||||
"lanNetworkNodes": [
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"name": "My Computer",
|
||||
"config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}",
|
||||
"project": "Foundations",
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}",
|
||||
"rootNodes": [
|
||||
{
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"project": "Foundations",
|
||||
"networkNodes": [
|
||||
"lanNetworkNodes": [
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"name": "My Computer",
|
||||
"config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}",
|
||||
"project": "Foundations",
|
||||
@@ -140433,8 +140433,8 @@
|
||||
"status": "Done"
|
||||
},
|
||||
"referenceParent": {
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"id": "3c165071-7558-4708-9999-8ffe71d346b1"
|
||||
}
|
||||
}
|
||||
@@ -141009,8 +141009,8 @@
|
||||
"status": "Done"
|
||||
},
|
||||
"referenceParent": {
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"id": "3c165071-7558-4708-9999-8ffe71d346b1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}",
|
||||
"rootNodes": [
|
||||
{
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"project": "Foundations",
|
||||
"networkNodes": [
|
||||
"lanNetworkNodes": [
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"name": "My Computer",
|
||||
"config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}",
|
||||
"project": "Foundations",
|
||||
@@ -7994,7 +7994,7 @@
|
||||
"status": "Done"
|
||||
},
|
||||
"referenceParent": {
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"name": "My Computer",
|
||||
"id": "e452cf65-2b2b-44f2-9e67-bdd9d3c008e4"
|
||||
}
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}",
|
||||
"rootNodes": [
|
||||
{
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"project": "Foundations",
|
||||
"networkNodes": [
|
||||
"lanNetworkNodes": [
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"name": "My Computer",
|
||||
"config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}",
|
||||
"project": "Foundations",
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}",
|
||||
"rootNodes": [
|
||||
{
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"project": "Foundations",
|
||||
"networkNodes": [
|
||||
"lanNetworkNodes": [
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"name": "My Computer",
|
||||
"config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}",
|
||||
"project": "Foundations",
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}",
|
||||
"rootNodes": [
|
||||
{
|
||||
"type": "Network",
|
||||
"name": "My Network",
|
||||
"type": "LAN Network",
|
||||
"name": "My LAN Network",
|
||||
"project": "Foundations",
|
||||
"networkNodes": [
|
||||
"lanNetworkNodes": [
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"name": "My Computer",
|
||||
"config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}",
|
||||
"project": "Foundations",
|
||||
|
||||
@@ -33,32 +33,48 @@
|
||||
"propertyNameAtParent": "assets",
|
||||
"alternativeIcons": [
|
||||
{
|
||||
"codeName": "XMR",
|
||||
"iconName": "monero"
|
||||
"codeName": "ADA",
|
||||
"iconName": "cardano"
|
||||
},
|
||||
{
|
||||
"codeName": "USDT",
|
||||
"iconName": "tether"
|
||||
"codeName": "BCH",
|
||||
"iconName": "bitcoin-cash"
|
||||
},
|
||||
{
|
||||
"codeName": "TRX",
|
||||
"iconName": "tron"
|
||||
"codeName": "BNB",
|
||||
"iconName": "binance-coin"
|
||||
},
|
||||
{
|
||||
"codeName": "XLM",
|
||||
"iconName": "stellar"
|
||||
"codeName": "BTC",
|
||||
"iconName": "bitcoin"
|
||||
},
|
||||
{
|
||||
"codeName": "QTUM",
|
||||
"iconName": "qtum"
|
||||
"codeName": "BUSD",
|
||||
"iconName": "binance-usd"
|
||||
},
|
||||
{
|
||||
"codeName": "NEO",
|
||||
"iconName": "neo"
|
||||
"codeName": "CAKE",
|
||||
"iconName": "cake"
|
||||
},
|
||||
{
|
||||
"codeName": "LTC",
|
||||
"iconName": "litecoin"
|
||||
"codeName": "DAI",
|
||||
"iconName": "dai"
|
||||
},
|
||||
{
|
||||
"codeName": "DASH",
|
||||
"iconName": "dash"
|
||||
},
|
||||
{
|
||||
"codeName": "DOGE",
|
||||
"iconName": "dogecoin"
|
||||
},
|
||||
{
|
||||
"codeName": "DOT",
|
||||
"iconName": "polkadot"
|
||||
},
|
||||
{
|
||||
"codeName": "EOS",
|
||||
"iconName": "eos"
|
||||
},
|
||||
{
|
||||
"codeName": "ETC",
|
||||
@@ -69,72 +85,76 @@
|
||||
"iconName": "ethereum"
|
||||
},
|
||||
{
|
||||
"codeName": "EOS",
|
||||
"iconName": "eos"
|
||||
},
|
||||
{
|
||||
"codeName": "DASH",
|
||||
"iconName": "dash"
|
||||
},
|
||||
{
|
||||
"codeName": "ADA",
|
||||
"iconName": "cardano"
|
||||
},
|
||||
{
|
||||
"codeName": "BCH",
|
||||
"iconName": "bitcoin-cash"
|
||||
},
|
||||
{
|
||||
"codeName": "BTC",
|
||||
"iconName": "bitcoin"
|
||||
},
|
||||
{
|
||||
"codeName": "BNB",
|
||||
"iconName": "binance-coin"
|
||||
},
|
||||
{
|
||||
"codeName": "USD",
|
||||
"iconName": "us-dollar"
|
||||
},
|
||||
{
|
||||
"codeName": "ZAR",
|
||||
"iconName": "zar"
|
||||
},
|
||||
{
|
||||
"codeName": "XRP",
|
||||
"iconName": "xrp"
|
||||
},
|
||||
{
|
||||
"codeName": "DOGE",
|
||||
"iconName": "dogecoin"
|
||||
},
|
||||
{
|
||||
"codeName": "SOL",
|
||||
"iconName": "solana"
|
||||
},
|
||||
{
|
||||
"codeName": "DOT",
|
||||
"iconName": "polkadot"
|
||||
},
|
||||
{
|
||||
"codeName": "UNI",
|
||||
"iconName": "uniswap"
|
||||
},
|
||||
{
|
||||
"codeName": "BUSD",
|
||||
"iconName": "binance-usd"
|
||||
},
|
||||
{
|
||||
"codeName": "SXP",
|
||||
"iconName": "swipe"
|
||||
"codeName": "EUR",
|
||||
"iconName": "euro"
|
||||
},
|
||||
{
|
||||
"codeName": "LINK",
|
||||
"iconName": "chainlink"
|
||||
},
|
||||
{
|
||||
"codeName": "EUR",
|
||||
"iconName": "euro"
|
||||
"codeName": "LTC",
|
||||
"iconName": "litecoin"
|
||||
},
|
||||
{
|
||||
"codeName": "NANO",
|
||||
"iconName": "nano"
|
||||
},
|
||||
{
|
||||
"codeName": "NEO",
|
||||
"iconName": "neo"
|
||||
},
|
||||
{
|
||||
"codeName": "QTUM",
|
||||
"iconName": "qtum"
|
||||
},
|
||||
{
|
||||
"codeName": "SOL",
|
||||
"iconName": "solana"
|
||||
},
|
||||
{
|
||||
"codeName": "SXP",
|
||||
"iconName": "swipe"
|
||||
},
|
||||
{
|
||||
"codeName": "TRX",
|
||||
"iconName": "tron"
|
||||
},
|
||||
{
|
||||
"codeName": "XMR",
|
||||
"iconName": "monero"
|
||||
},
|
||||
{
|
||||
"codeName": "UNI",
|
||||
"iconName": "uniswap"
|
||||
},
|
||||
{
|
||||
"codeName": "USD",
|
||||
"iconName": "us-dollar"
|
||||
},
|
||||
{
|
||||
"codeName": "USDC",
|
||||
"iconName": "usdc"
|
||||
},
|
||||
{
|
||||
"codeName": "USDT",
|
||||
"iconName": "tether"
|
||||
},
|
||||
{
|
||||
"codeName": "VET",
|
||||
"iconName": "vechain"
|
||||
},
|
||||
{
|
||||
"codeName": "XLM",
|
||||
"iconName": "stellar"
|
||||
},
|
||||
{
|
||||
"codeName": "XRP",
|
||||
"iconName": "xrp"
|
||||
},
|
||||
{
|
||||
"codeName": "ZAR",
|
||||
"iconName": "zar"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -38,7 +38,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Network Node->"
|
||||
"compatibleTypes": "->LAN Network Node->"
|
||||
},
|
||||
"propertyNameAtParent": "dataStorage",
|
||||
"childrenNodesProperties": [
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Network Node->"
|
||||
"compatibleTypes": "->LAN Network Node->"
|
||||
},
|
||||
"propertyNameAtParent": "dataTasks",
|
||||
"childrenNodesProperties": [
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
@@ -69,7 +69,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Network->"
|
||||
"compatibleTypes": "->LAN Network->"
|
||||
},
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
@@ -103,5 +103,5 @@
|
||||
"autoAdd": true
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "networkNodes"
|
||||
"propertyNameAtParent": "lanNetworkNodes"
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"type": "Network",
|
||||
"type": "LAN Network",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Network Node",
|
||||
"relatedUiObject": "Network Node",
|
||||
"label": "Add LAN Network Node",
|
||||
"relatedUiObject": "LAN Network Node",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
@@ -22,9 +22,9 @@
|
||||
"level": 0,
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "networkNodes",
|
||||
"name": "lanNetworkNodes",
|
||||
"type": "array",
|
||||
"childType": "Network Node"
|
||||
"childType": "LAN Network Node"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -49,7 +49,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Network Node->"
|
||||
"compatibleTypes": "->LAN Network Node->"
|
||||
},
|
||||
"propertyNameAtParent": "learningTasks",
|
||||
"childrenNodesProperties": [
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Network",
|
||||
"relatedUiObject": "Network",
|
||||
"relatedUiObject": "LAN Network",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 0,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Network Node->"
|
||||
"compatibleTypes": "->LAN Network Node->"
|
||||
},
|
||||
"propertyNameAtParent": "productionTradingTasks",
|
||||
"childrenNodesProperties": [
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 0,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Network Node->"
|
||||
"compatibleTypes": "->LAN Network Node->"
|
||||
},
|
||||
"propertyNameAtParent": "testingTradingTasks",
|
||||
"childrenNodesProperties": [
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Chapter",
|
||||
"text": "III->Foundations->Topic->Network->The Network hierarchy organizes the infrastructure to run bots and store data. It is the hierarchy you will use the most to operate the system.",
|
||||
"text": "III->Foundations->Topic->LAN Network->The Network hierarchy organizes the infrastructure to run bots and store data. It is the hierarchy you will use the most to operate the system.",
|
||||
"updated": 1610309740906
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"type": "Network Node",
|
||||
"type": "LAN Network Node",
|
||||
"definition": {
|
||||
"text": "A network node represents a machine running Superalgos, on which processes run and data is stored.",
|
||||
"translations": [
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"type": "Network",
|
||||
"type": "LAN Network",
|
||||
"definition": {
|
||||
"text": "The network hierarchy provides the control functions for running data-mining and trading operations. Because operations may be run either on a single machine or distributed over a network of machines, it also contains definitions regarding the physical location in which nodes live or function.",
|
||||
"translations": [
|
||||
|
||||
@@ -80,8 +80,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Ctrl or Cmd + Shift + Key-S",
|
||||
"updated": 1615891225650
|
||||
"text": "Ctrl or Cmd + Shift + Alt + Key-S",
|
||||
"updated": 1631372841724
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"review": "Superalgos Project Review",
|
||||
"pageNumber": 27,
|
||||
"type": "Superalgos Review - My highly constructive and original review",
|
||||
"definition": {
|
||||
"text": "Write a summary for this review page."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The project looks nice.",
|
||||
"updated": 1631145094399
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This was my highly constructive and original review."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Tentacule23"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"review": "Superalgos Project Review",
|
||||
"pageNumber": 31,
|
||||
"type": "Superalgos Review - Great Getting Started Tutorials But Not Fully Stable",
|
||||
"definition": {
|
||||
"text": "Write a summary for this review page."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Great GUI - hierarchy, options to move icons around, create backups, and workspaces."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Although, an opportunity to improve troubleshooting errors exists (e.g. providing more on-screen user feedback). A couple of errors occured for me during the getting started tutorials, which made my learning experience a little frustrating."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Otherwise, I'm looking forward to exploring the full potential of the app framework! :)"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -62,7 +62,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "dataStorage = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(networkNode, 'Data Storage')",
|
||||
"text": "dataStorage = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(lanNetworkNode, 'Data Storage')",
|
||||
"updated": 1614943544233
|
||||
},
|
||||
{
|
||||
|
||||
@@ -21,6 +21,15 @@
|
||||
"style": "Success",
|
||||
"text": "If you change the code of your function, reload the UI and you can debug it again with the new changes.",
|
||||
"updated": 1614939195464
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You can find more information about setting up and debugging in this topic:",
|
||||
"updated": 1631371694241
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Debugging - Download and Install Visual Studio Code"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -70,17 +70,17 @@
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Network",
|
||||
"text": "LAN Network",
|
||||
"updated": 1609945037649
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Network->Definition",
|
||||
"text": "Foundations->Node->LAN Network->Definition",
|
||||
"updated": 1609945860234
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Network->Content",
|
||||
"text": "Foundations->Node->LAN Network->Content",
|
||||
"updated": 1609945864347
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "1",
|
||||
"type": "Network Hierarchy",
|
||||
"type": "LAN Network Hierarchy",
|
||||
"definition": {
|
||||
"text": "The Network Hierarchy organizes the infrastructure to run bots and store data. It is the hierarchy you will use the most to operate the system.",
|
||||
"text": "The LAN Network Hierarchy organizes the infrastructure to run bots and store data. It is the hierarchy you will use the most to operate the system.",
|
||||
"updated": 1610043827538
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Network->Definition",
|
||||
"text": "Foundations->Node->LAN Network->Definition",
|
||||
"updated": 1610043677920
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Network->Content",
|
||||
"text": "Foundations->Node->LAN Network->Content",
|
||||
"updated": 1610043683253
|
||||
},
|
||||
{
|
||||
@@ -24,21 +24,21 @@
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Foundations->Network->3",
|
||||
"text": "Foundations->LAN Network->3",
|
||||
"updated": 1610049486480
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Network Node"
|
||||
"text": "LAN Network Node"
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Network Node->Definition",
|
||||
"text": "Foundations->Node->LAN Network Node->Definition",
|
||||
"updated": 1610043762523
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Network Node->Content",
|
||||
"text": "Foundations->Node->LAN Network Node->Content",
|
||||
"updated": 1610043768852
|
||||
},
|
||||
{
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "2",
|
||||
"type": "Organization of Tasks",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "3",
|
||||
"type": "Data Tasks Section",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "4",
|
||||
"type": "Indicator and Sensor Bot Instances",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "5",
|
||||
"type": "Testing Trading Tasks Section",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "6",
|
||||
"type": "Production Trading Tasks Section",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "7",
|
||||
"type": "Trading Bot Instance and Trading Sessions",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "8",
|
||||
"type": "Trading Session References",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "9",
|
||||
"type": "Trading Session Parameters",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "10",
|
||||
"type": "Data Storage Section",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "11",
|
||||
"type": "Data Mines Data Section",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "12",
|
||||
"type": "Trading Mines Data Section",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "13",
|
||||
"type": "Data and Trading Mine Products",
|
||||
"definition": {
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"topic": "Network",
|
||||
"topic": "LAN Network",
|
||||
"pageNumber": "14",
|
||||
"type": "How to Safely Close Superalgos",
|
||||
"definition": {
|
||||
@@ -3,8 +3,8 @@
|
||||
"pageNumber": 6,
|
||||
"type": "Kucoin Test Status",
|
||||
"definition": {
|
||||
"text": "Kucoin is not tested for data mining nor for live trading.",
|
||||
"updated": 1616003885667
|
||||
"text": "Kucoin is tested for data mining and for live trading.",
|
||||
"updated": 1632650068116
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
@@ -14,8 +14,8 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1-min OHLCVs Capability: Unknown. The ability to fetch historic data for backtesting purposes has not been verified.",
|
||||
"updated": 1616003998850
|
||||
"text": "1-min OHLCVs Capability: Yes. The ability to fetch historic data for backtesting purposes has been verified.",
|
||||
"updated": 1632650093003
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
@@ -24,13 +24,13 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading Capability: Unknown. The ability to run strategies in live-trading mode has not been verified.",
|
||||
"updated": 1616003950201
|
||||
"text": "Trading Capability: Yes. The ability to run strategies in live-trading mode has been verified.",
|
||||
"updated": 1632650205665
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Comments: While testing with standard configuration it was possible to fetch 1 day of historical Raw Data",
|
||||
"updated": 1615211286656
|
||||
"text": "Comments: This exchange has not yet fully tested but I'm currently live trading on SHIB-USDT pair. I will update this section when I will have had the opportunity to do a more in-depth test",
|
||||
"updated": 1632650423168
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
|
||||
@@ -18,12 +18,12 @@
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Network",
|
||||
"text": "LAN Network",
|
||||
"updated": 1614353250354
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "A Network, represented by the Network Hierarchy, is just a definition that allows the system to know where Tasks need to be run, and where data is hosted. At any workspace you might define one, or even more than one, Network Hierarchy. For simplicity, we will continue the explanation assuming only one Network is defined.",
|
||||
"text": "A Network, represented by the LAN Network Hierarchy, is just a definition that allows the system to know where Tasks need to be run, and where data is hosted. At any workspace you might define one, or even more than one, LAN Network Hierarchy. For simplicity, we will continue the explanation assuming only one Network is defined.",
|
||||
"updated": 1617263502648
|
||||
},
|
||||
{
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "At the Network Hierarchy"
|
||||
"text": "At the LAN Network Hierarchy"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -68,7 +68,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Here this procedure will add Time Machine s with Timeline Chart s inside of them. Deeper inside this branch, you will find Layer s node, which references the Data Products at the Network Hierarchy. That reference is crucial for the system to know when you turn on a Layer at the charts, where the data needs to be fetched from (which Client).",
|
||||
"text": "Here this procedure will add Time Machine s with Timeline Chart s inside of them. Deeper inside this branch, you will find Layer s node, which references the Data Products at the LAN Network Hierarchy. That reference is crucial for the system to know when you turn on a Layer at the charts, where the data needs to be fetched from (which Client).",
|
||||
"updated": 1617263990004
|
||||
},
|
||||
{
|
||||
@@ -176,7 +176,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "To add a network node, select Add Network Node on the Superalgos Network node menu. A network node is added along with the basic structure of nodes to set up a node."
|
||||
"text": "To add a network node, select Add LAN Network Node on the Superalgos Network node menu. A network node is added along with the basic structure of nodes to set up a node."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
|
||||
@@ -62,6 +62,11 @@ exports.newFoundationsBotModulesSnapshots = function(processIndex) {
|
||||
}
|
||||
|
||||
function finalize() {
|
||||
//trigger exits added for extra save moment for datapreserve
|
||||
if (tradingEngine.tradingCurrent.strategy.begin.value > 0) {
|
||||
strategyExit()
|
||||
positionExit()
|
||||
}
|
||||
writeSnapshotFiles()
|
||||
tradingEngine = undefined
|
||||
tradingSystem = undefined
|
||||
@@ -220,8 +225,8 @@ exports.newFoundationsBotModulesSnapshots = function(processIndex) {
|
||||
instruction = instruction.replace(/!==/g, '')
|
||||
instruction = instruction.replace(/==/g, '')
|
||||
instruction = instruction.replace(/===/g, '')
|
||||
instruction = instruction.replace(/{/g, '') //this wrecks something in JS markup?
|
||||
instruction = instruction.replace(/}/g, '') //this wrecks something in JS markup?
|
||||
instruction = instruction.replace(/{/g, '')
|
||||
instruction = instruction.replace(/}/g, '')
|
||||
if (instruction.indexOf('chart') >= 0) {
|
||||
let parts = instruction.split('.')
|
||||
let timeFrame = parts[1]
|
||||
@@ -243,7 +248,6 @@ exports.newFoundationsBotModulesSnapshots = function(processIndex) {
|
||||
}
|
||||
let key = timeFrame + '-' + product + '-' + property
|
||||
let existingKey
|
||||
|
||||
if (addToStrategyValues === true) {
|
||||
addValues(strategyKeys, strategyValues)
|
||||
}
|
||||
@@ -310,7 +314,7 @@ exports.newFoundationsBotModulesSnapshots = function(processIndex) {
|
||||
let qouteProfit = ((quoteClose / quoteOpen * 100) - 100)
|
||||
let baseProfit = ((baseClose / baseOpen * 100) - 100)
|
||||
|
||||
let closeHeaders = ['Trade Number', 'Open Datetime', 'Close Datetime', 'Strategy Name', 'Trigger On Situation', 'Take Position Situation', 'Open Position in Base Asset', 'Close Position in Base Asset', 'Open Position in Quoted Asset', 'Close Position in Quoted Asset', 'Result In Base Asset', 'Result In Quoted Asset', 'ROI in Base Asset', '% P/L Base Asset', 'P/L Type Base Asset', 'ROI in Quoted Asset', '% P/L Quoted Asset', 'P/L Type Quoted Asset', 'Exit Type']
|
||||
let closeHeaders = ['Trade Number', 'Open Datetime', 'Close Datetime', 'Strategy Name', 'Trigger On Situation', 'Take Position Situation', 'Open Position in Base Asset', 'Close Position in Base Asset', 'Open Position in Quoted Asset', 'Close Position in Quoted Asset', 'Result In Base Asset', 'Result In Quoted Asset', 'ROI in Base Asset', '% P/L Base Asset', 'P/L Type Base Asset', 'ROI in Quoted Asset', '% P/L Quoted Asset', 'P/L Type Quoted Asset', 'Exit Type', '# Periods']
|
||||
closeValues = [
|
||||
tradingEngine.tradingCurrent.tradingEpisode.tradingEpisodeCounters.positions.value, // Position Number
|
||||
(new Date(openDatetime)).toISOString(), // Open Datetime
|
||||
@@ -331,7 +335,8 @@ exports.newFoundationsBotModulesSnapshots = function(processIndex) {
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.ROI.value, // ROI in Quoted Asset <- not sure this works as intended
|
||||
qouteProfit + '%', // % profit loss in quoted Asset
|
||||
qouteProfit === 0 ? 'Even' : (qouteProfit > 0 ? "Profit" : "Loss"),
|
||||
tradingEngine.tradingCurrent.position.exitType.value // Exit Type
|
||||
tradingEngine.tradingCurrent.position.exitType.value, // Exit Type
|
||||
tradingEngine.tradingCurrent.position.positionCounters.periods.value // periods counter
|
||||
]
|
||||
|
||||
if (createCloseHeaders === true) {
|
||||
@@ -373,15 +378,35 @@ exports.newFoundationsBotModulesSnapshots = function(processIndex) {
|
||||
|
||||
function writeOutput(fileContent) {
|
||||
let separator = '\r\n';
|
||||
let contentArray = [];
|
||||
|
||||
// if we have file content extract rows
|
||||
if (fileContent != '') {
|
||||
contentArray = fileContent.split(separator)
|
||||
}
|
||||
|
||||
parseRecord(snapshots.headers)
|
||||
|
||||
for (let i = 0; i < snapshotArray.length; i++) {
|
||||
let record = snapshotArray[i];
|
||||
parseRecord(record)
|
||||
if (record.length > 0) {
|
||||
parseRecord(record)
|
||||
}
|
||||
}
|
||||
|
||||
function parseRecord(record) {
|
||||
// if we have undefined values, we need to extract the previous stored values for this trade and append them to the new record for completion
|
||||
if (record[record.length - 1] === undefined && contentArray.length > 0) {
|
||||
|
||||
let rowToMutateArray = contentArray[contentArray.length - 1].split(',')
|
||||
// check if are for sure on the same tradenumber and merge the data and remove previous line incl separator
|
||||
if (rowToMutateArray[0] == record[0]) {
|
||||
record.pop()
|
||||
rowToMutateArray.splice(0, record.length)
|
||||
record = record.concat(rowToMutateArray)
|
||||
fileContent = fileContent.replace(contentArray[contentArray.length - 1], '')
|
||||
fileContent = fileContent.replace(/\r\n$/, '')
|
||||
}
|
||||
}
|
||||
for (let j = 0; j < record.length; j++) {
|
||||
let property = record[j]
|
||||
|
||||
@@ -426,6 +451,9 @@ exports.newFoundationsBotModulesSnapshots = function(processIndex) {
|
||||
function onFileReceived(err, text) {
|
||||
if (err.result === TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE.result) {
|
||||
try {
|
||||
// remove the last linebreak and seperator which is introduced extra during save
|
||||
text = text.replace(/\n$/, '')
|
||||
text = text.replace(/\r\n$/, '')
|
||||
writeOutput(text)
|
||||
} catch (err) {
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> fileName = ' + filePath);
|
||||
|
||||
@@ -8,7 +8,7 @@ exports.newFoundationsProcessModulesDataset = function (processIndex) {
|
||||
|
||||
let thisObject = {
|
||||
node: undefined,
|
||||
networkNode: undefined,
|
||||
lanNetworkNode: undefined,
|
||||
exchange: undefined,
|
||||
market: undefined,
|
||||
product: undefined,
|
||||
@@ -85,12 +85,12 @@ exports.newFoundationsProcessModulesDataset = function (processIndex) {
|
||||
thisObject.product = productDefinition.config.singularVariableName
|
||||
|
||||
/*
|
||||
We will find the networkNode that leads to this Product Definition
|
||||
We will find the lanNetworkNode that leads to this Product Definition
|
||||
and is related to this exchange and market.
|
||||
*/
|
||||
let networkNode = fincNetworkNode(network, productDefinition, thisObject.exchange, thisObject.market)
|
||||
let lanNetworkNode = fincNetworkNode(network, productDefinition, thisObject.exchange, thisObject.market)
|
||||
|
||||
if (networkNode === undefined) {
|
||||
if (lanNetworkNode === undefined) {
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> Network Node not found.")
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> Initialization Failed because we could not find where the data of this dataset is located within the network. Check the logs for more info.");
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> Could not find where " + productDefinition.name + " for " + thisObject.exchange + " " + thisObject.market + " is stored within the network.");
|
||||
@@ -99,9 +99,9 @@ exports.newFoundationsProcessModulesDataset = function (processIndex) {
|
||||
}
|
||||
|
||||
/* We found where the data is located on the network. */
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[INFO] initialize -> Retrieving data from " + networkNode.name + " -> host = " + networkNode.config.host + ' -> port = ' + networkNode.config.webPort + '.')
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[INFO] initialize -> Retrieving data from " + lanNetworkNode.name + " -> host = " + lanNetworkNode.config.host + ' -> port = ' + lanNetworkNode.config.webPort + '.')
|
||||
|
||||
fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex, networkNode.config.host, networkNode.config.webPort);
|
||||
fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex, lanNetworkNode.config.host, lanNetworkNode.config.webPort);
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE, true);
|
||||
|
||||
} catch (err) {
|
||||
@@ -113,7 +113,7 @@ exports.newFoundationsProcessModulesDataset = function (processIndex) {
|
||||
|
||||
function finalize() {
|
||||
fileStorage = undefined
|
||||
thisObject.networkNode = undefined
|
||||
thisObject.lanNetworkNode = undefined
|
||||
thisObject.exchange = undefined
|
||||
thisObject.market = undefined
|
||||
bot = undefined
|
||||
@@ -190,7 +190,7 @@ exports.newFoundationsProcessModulesDataset = function (processIndex) {
|
||||
A. We are interested in a particular Exchange and Market.
|
||||
B. We have the Network we received from the UI whe the user ran the Task.
|
||||
C. We have the Product Definition that is the parent node of the Data Set represented by this object.
|
||||
D. This Product Definition is referenced by one or more Data Products nodes at some branch of the Network Hierarchy.
|
||||
D. This Product Definition is referenced by one or more Data Products nodes at some branch of the LAN Network Hierarchy.
|
||||
E. We need to find the right Data Product node, the one who is itself a descendent of the Market Data Products
|
||||
node that is referencing the market and exchange that we have as a parameter of this function.
|
||||
|
||||
@@ -206,7 +206,7 @@ exports.newFoundationsProcessModulesDataset = function (processIndex) {
|
||||
|
||||
*/
|
||||
let found = false
|
||||
let networkNode
|
||||
let lanNetworkNode
|
||||
let splittedMarket = market.split('-')
|
||||
let baseAsset = splittedMarket[0]
|
||||
let quotedAsset = splittedMarket[1]
|
||||
@@ -214,7 +214,7 @@ exports.newFoundationsProcessModulesDataset = function (processIndex) {
|
||||
scanNodeMesh(network)
|
||||
|
||||
if (found === true) {
|
||||
return networkNode
|
||||
return lanNetworkNode
|
||||
} else {
|
||||
return
|
||||
}
|
||||
@@ -235,12 +235,12 @@ exports.newFoundationsProcessModulesDataset = function (processIndex) {
|
||||
return
|
||||
}
|
||||
|
||||
if (startingNode.type === 'Network Node') {
|
||||
if (startingNode.type === 'LAN Network Node') {
|
||||
/*
|
||||
We will store the Network Node here so that if we find the rignt path
|
||||
we can know from which Netwrok Node it going through.
|
||||
*/
|
||||
networkNode = startingNode
|
||||
lanNetworkNode = startingNode
|
||||
}
|
||||
|
||||
if (
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
|
||||
let thisObject = {
|
||||
networkNode: undefined,
|
||||
lanNetworkNode: undefined,
|
||||
initialize: initialize,
|
||||
finalize: finalize,
|
||||
start: start,
|
||||
@@ -90,11 +90,11 @@
|
||||
and need to exactly the same task to exist, you should split the network in two
|
||||
different networks, each one with unique tasks so as to avoid confussion.
|
||||
*/
|
||||
for (let i = 0; i < network.networkNodes.length; i++) {
|
||||
let networkNode = network.networkNodes[i]
|
||||
if (networkNode.dataTasks !== undefined) {
|
||||
for (let z = 0; z < networkNode.dataTasks.projectDataTasks.length; z++) {
|
||||
let projectDataTasks = networkNode.dataTasks.projectDataTasks[z]
|
||||
for (let i = 0; i < network.lanNetworkNodes.length; i++) {
|
||||
let lanNetworkNode = network.lanNetworkNodes[i]
|
||||
if (lanNetworkNode.dataTasks !== undefined) {
|
||||
for (let z = 0; z < lanNetworkNode.dataTasks.projectDataTasks.length; z++) {
|
||||
let projectDataTasks = lanNetworkNode.dataTasks.projectDataTasks[z]
|
||||
if (projectDataTasks.exchangeDataTasks === undefined) {continue}
|
||||
for (let j = 0; j < projectDataTasks.exchangeDataTasks.length; j++) {
|
||||
let exchangeTasks = projectDataTasks.exchangeDataTasks[j]
|
||||
@@ -118,22 +118,22 @@
|
||||
We found where the task that runs the process definition
|
||||
we are waiting for is located on the network.
|
||||
*/
|
||||
thisObject.networkNode = networkNode
|
||||
thisObject.lanNetworkNode = lanNetworkNode
|
||||
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[INFO] initialize -> Connecting to Websockets Server " + networkNode.name +
|
||||
" -> host = " + networkNode.config.host +
|
||||
' -> port = ' + networkNode.config.webSocketsPort + '.');
|
||||
"[INFO] initialize -> Connecting to Websockets Server " + lanNetworkNode.name +
|
||||
" -> host = " + lanNetworkNode.config.host +
|
||||
' -> port = ' + lanNetworkNode.config.webSocketsPort + '.');
|
||||
|
||||
|
||||
eventServerClient = TS.projects.foundations.taskModules.eventServerClient.newFoundationsTaskModulesEventServerClient(networkNode.config.host, networkNode.config.webSocketsPort)
|
||||
eventServerClient = TS.projects.foundations.taskModules.eventServerClient.newFoundationsTaskModulesEventServerClient(lanNetworkNode.config.host, lanNetworkNode.config.webSocketsPort)
|
||||
eventServerClient.initialize(onConnected)
|
||||
|
||||
function onConnected() {
|
||||
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[INFO] initialize -> Connected to Websockets Server " + networkNode.name +
|
||||
" -> host = " + networkNode.config.host +
|
||||
' -> port = ' + networkNode.config.webSocketsPort + '.');
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[INFO] initialize -> Connected to Websockets Server " + lanNetworkNode.name +
|
||||
" -> host = " + lanNetworkNode.config.host +
|
||||
' -> port = ' + lanNetworkNode.config.webSocketsPort + '.');
|
||||
|
||||
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE);
|
||||
@@ -173,7 +173,7 @@
|
||||
|
||||
processThisDependsOn = undefined
|
||||
currentProcessKey = undefined
|
||||
thisObject.networkNode = undefined
|
||||
thisObject.lanNetworkNode = undefined
|
||||
bot = undefined
|
||||
thisObject = undefined
|
||||
}
|
||||
@@ -202,7 +202,7 @@
|
||||
|
||||
eventServerClient.listenToEvent(key, 'Process Execution Finished', undefined, callerId, responseCallBack, eventsCallBack)
|
||||
|
||||
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(processIndex, undefined, undefined, "Waiting for " + thisObject.networkNode.name + "->" + processThisDependsOn.parentNode.parentNode.name + "->" + processThisDependsOn.parentNode.config.codeName + "->" + processThisDependsOn.config.codeName)
|
||||
TS.projects.foundations.functionLibraries.processFunctions.processHeartBeat(processIndex, undefined, undefined, "Waiting for " + thisObject.lanNetworkNode.name + "->" + processThisDependsOn.parentNode.parentNode.name + "->" + processThisDependsOn.parentNode.config.codeName + "->" + processThisDependsOn.config.codeName)
|
||||
|
||||
function responseCallBack(message) {
|
||||
if (message.result !== TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE.result) {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
const MODULE_NAME = "Status Report"
|
||||
|
||||
let thisObject = {
|
||||
networkNode: undefined,
|
||||
lanNetworkNode: undefined,
|
||||
mainUtility: undefined,
|
||||
file: undefined, // Here we have the JSON object representing the file content.
|
||||
initialize: initialize,
|
||||
@@ -106,13 +106,13 @@
|
||||
let network = TS.projects.foundations.globals.taskConstants.NETWORK_NODE
|
||||
let processThisDependsOn = statusDependencyNode.referenceParent.parentNode
|
||||
|
||||
for (let i = 0; i < network.networkNodes.length; i++) {
|
||||
let networkNode = network.networkNodes[i]
|
||||
for (let i = 0; i < network.lanNetworkNodes.length; i++) {
|
||||
let lanNetworkNode = network.lanNetworkNodes[i]
|
||||
|
||||
if (checkThisDataBranch(networkNode.dataTasks) === true) { return }
|
||||
if (checkThisTradingBranch(networkNode.testingTradingTasks) === true) { return }
|
||||
if (checkThisTradingBranch(networkNode.productionTradingTasks) === true) { return }
|
||||
if (checkThisLearningBranch(networkNode.learningTasks) === true) { return }
|
||||
if (checkThisDataBranch(lanNetworkNode.dataTasks) === true) { return }
|
||||
if (checkThisTradingBranch(lanNetworkNode.testingTradingTasks) === true) { return }
|
||||
if (checkThisTradingBranch(lanNetworkNode.productionTradingTasks) === true) { return }
|
||||
if (checkThisLearningBranch(lanNetworkNode.learningTasks) === true) { return }
|
||||
|
||||
function checkThisDataBranch(branch) {
|
||||
if (branch === undefined) { return }
|
||||
@@ -151,10 +151,10 @@
|
||||
We found where the task that runs the process definition this status report depends on
|
||||
and where it is located on the network.
|
||||
*/
|
||||
thisObject.networkNode = networkNode
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[INFO] initialize -> Retrieving status report from " + networkNode.name + " -> host = " + networkNode.config.host + ' -> port = ' + networkNode.config.webPort + '.')
|
||||
thisObject.lanNetworkNode = lanNetworkNode
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[INFO] initialize -> Retrieving status report from " + lanNetworkNode.name + " -> host = " + lanNetworkNode.config.host + ' -> port = ' + lanNetworkNode.config.webPort + '.')
|
||||
|
||||
fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex, networkNode.config.host, networkNode.config.webPort)
|
||||
fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex, lanNetworkNode.config.host, lanNetworkNode.config.webPort)
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE)
|
||||
return true
|
||||
}
|
||||
@@ -203,10 +203,10 @@
|
||||
We found where the task that runs the process definition this status report depends on
|
||||
and where it is located on the network.
|
||||
*/
|
||||
thisObject.networkNode = networkNode
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[INFO] initialize -> Retrieving status report from " + networkNode.name + " -> host = " + networkNode.config.host + ' -> port = ' + networkNode.config.webPort + '.')
|
||||
thisObject.lanNetworkNode = lanNetworkNode
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[INFO] initialize -> Retrieving status report from " + lanNetworkNode.name + " -> host = " + lanNetworkNode.config.host + ' -> port = ' + lanNetworkNode.config.webPort + '.')
|
||||
|
||||
fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex, networkNode.config.host, networkNode.config.webPort)
|
||||
fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex, lanNetworkNode.config.host, lanNetworkNode.config.webPort)
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE)
|
||||
return true
|
||||
}
|
||||
@@ -255,10 +255,10 @@
|
||||
We found where the task that runs the process definition this status report depends on
|
||||
and where it is located on the network.
|
||||
*/
|
||||
thisObject.networkNode = networkNode
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[INFO] initialize -> Retrieving status report from " + networkNode.name + " -> host = " + networkNode.config.host + ' -> port = ' + networkNode.config.webPort + '.')
|
||||
thisObject.lanNetworkNode = lanNetworkNode
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[INFO] initialize -> Retrieving status report from " + lanNetworkNode.name + " -> host = " + lanNetworkNode.config.host + ' -> port = ' + lanNetworkNode.config.webPort + '.')
|
||||
|
||||
fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex, networkNode.config.host, networkNode.config.webPort)
|
||||
fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex, lanNetworkNode.config.host, lanNetworkNode.config.webPort)
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE)
|
||||
return true
|
||||
}
|
||||
@@ -294,7 +294,7 @@
|
||||
|
||||
function finalize() {
|
||||
fileStorage = undefined
|
||||
thisObject.networkNode = undefined
|
||||
thisObject.lanNetworkNode = undefined
|
||||
bot = undefined
|
||||
thisObject = undefined
|
||||
}
|
||||
|
||||
@@ -98,21 +98,21 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
|
||||
for (let i = 0; i < rootNodes.length; i++) {
|
||||
let rootNode = rootNodes[i]
|
||||
if (rootNode.type === 'Network') {
|
||||
let networkNode = rootNode
|
||||
scanNetworkNode(networkNode)
|
||||
if (rootNode.type === 'LAN Network') {
|
||||
let lanNetworkNode = rootNode
|
||||
scanNetworkNode(lanNetworkNode)
|
||||
}
|
||||
}
|
||||
|
||||
function scanNetworkNode(networkNode) {
|
||||
if (networkNode === undefined) { return }
|
||||
function scanNetworkNode(lanNetworkNode) {
|
||||
if (lanNetworkNode === undefined) { return }
|
||||
|
||||
let backtestingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Backtesting Session')
|
||||
let fordwardTestingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Forward Testing Session')
|
||||
let paperTradingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Paper Trading Session')
|
||||
let liveTradingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Live Trading Session')
|
||||
let backLearningSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Back Learning Session')
|
||||
let liveLearningSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Live Learning Session')
|
||||
let backtestingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Backtesting Session')
|
||||
let fordwardTestingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Forward Testing Session')
|
||||
let paperTradingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Paper Trading Session')
|
||||
let liveTradingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Live Trading Session')
|
||||
let backLearningSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Back Learning Session')
|
||||
let liveLearningSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Live Learning Session')
|
||||
|
||||
scanSessionArray(backtestingSessionsArray)
|
||||
scanSessionArray(fordwardTestingSessionsArray)
|
||||
@@ -130,19 +130,19 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
let market = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false)
|
||||
if (market.payload.referenceParent === undefined) { continue }
|
||||
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, session, true) === true) {
|
||||
createTimeMachine(node, session, market.payload.referenceParent, networkNode, rootNodes)
|
||||
createTimeMachine(node, session, market.payload.referenceParent, lanNetworkNode, rootNodes)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function createTimeMachine(dashboard, session, market, networkNode, rootNodes) {
|
||||
function createTimeMachine(dashboard, session, market, lanNetworkNode, rootNodes) {
|
||||
let mineProducts
|
||||
let timeMachine = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(dashboard, 'Time Machine')
|
||||
let exchange = market.payload.parentNode.payload.parentNode
|
||||
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(timeMachine, session)
|
||||
timeMachine.name = session.name + ' ' + session.type + ' ' + networkNode.name + ' ' + exchange.name + ' ' + market.name
|
||||
timeMachine.name = session.name + ' ' + session.type + ' ' + lanNetworkNode.name + ' ' + exchange.name + ' ' + market.name
|
||||
timeMachine.payload.floatingObject.collapseToggle()
|
||||
timeMachine.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
timeMachine.timeFrameScale.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
@@ -151,7 +151,7 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
/*
|
||||
We will create 3 Time Line Charts for the Trading Mine Products
|
||||
*/
|
||||
mineProducts = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Trading Mine Products')
|
||||
mineProducts = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Trading Mine Products')
|
||||
for (let j = 0; j < mineProducts.length; j++) {
|
||||
let mineProduct = mineProducts[j]
|
||||
/*
|
||||
@@ -210,7 +210,7 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
/*
|
||||
We will create 3 Time Line Charts for the Learning Mine Products
|
||||
*/
|
||||
mineProducts = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Learning Mine Products')
|
||||
mineProducts = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Learning Mine Products')
|
||||
for (let j = 0; j < mineProducts.length; j++) {
|
||||
let mineProduct = mineProducts[j]
|
||||
/*
|
||||
@@ -269,7 +269,7 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
/*
|
||||
We need to create a Timeline Chart for each Data Mine Products.
|
||||
*/
|
||||
mineProducts = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Data Mine Products')
|
||||
mineProducts = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Data Mine Products')
|
||||
for (let j = 0; j < mineProducts.length; j++) {
|
||||
let mineProduct = mineProducts[j]
|
||||
/*
|
||||
@@ -302,7 +302,7 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
function addMissingDashboards(node, rootNodes) {
|
||||
for (let i = 0; i < rootNodes.length; i++) {
|
||||
let rootNode = rootNodes[i]
|
||||
if (rootNode.type === 'Network') {
|
||||
if (rootNode.type === 'LAN Network') {
|
||||
let network = rootNode
|
||||
scanNetwork(network)
|
||||
}
|
||||
@@ -311,25 +311,25 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
function scanNetwork(network) {
|
||||
if (network === undefined) { return }
|
||||
|
||||
for (let j = 0; j < network.networkNodes.length; j++) {
|
||||
let networkNode = network.networkNodes[j]
|
||||
scanNetworkNode(networkNode)
|
||||
for (let j = 0; j < network.lanNetworkNodes.length; j++) {
|
||||
let lanNetworkNode = network.lanNetworkNodes[j]
|
||||
scanNetworkNode(lanNetworkNode)
|
||||
}
|
||||
|
||||
function scanNetworkNode(networkNode) {
|
||||
let testingTradingTasks = UI.projects.foundations.utilities.branches.findInBranch(networkNode, 'Testing Trading Tasks', node, true)
|
||||
let productionTradingTasks = UI.projects.foundations.utilities.branches.findInBranch(networkNode, 'Production Trading Tasks', node, true)
|
||||
function scanNetworkNode(lanNetworkNode) {
|
||||
let testingTradingTasks = UI.projects.foundations.utilities.branches.findInBranch(lanNetworkNode, 'Testing Trading Tasks', node, true)
|
||||
let productionTradingTasks = UI.projects.foundations.utilities.branches.findInBranch(lanNetworkNode, 'Production Trading Tasks', node, true)
|
||||
|
||||
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, testingTradingTasks, true) === true) {
|
||||
let dashboard = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Dashboard')
|
||||
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(dashboard, testingTradingTasks)
|
||||
dashboard.name = testingTradingTasks.type + ' ' + networkNode.name
|
||||
dashboard.name = testingTradingTasks.type + ' ' + lanNetworkNode.name
|
||||
}
|
||||
|
||||
if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, productionTradingTasks, true) === true) {
|
||||
let dashboard = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Dashboard')
|
||||
UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(dashboard, productionTradingTasks)
|
||||
dashboard.name = productionTradingTasks.type + ' ' + networkNode.name
|
||||
dashboard.name = productionTradingTasks.type + ' ' + lanNetworkNode.name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,7 +232,7 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
|
||||
for (let i = 0; i < rootNodes.length; i++) {
|
||||
let rootNode = rootNodes[i]
|
||||
if (rootNode.type === 'Network') {
|
||||
if (rootNode.type === 'LAN Network') {
|
||||
installInNetwork(rootNode)
|
||||
}
|
||||
}
|
||||
@@ -248,12 +248,12 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
|
||||
function installInNetwork(network) {
|
||||
|
||||
for (let j = 0; j < network.networkNodes.length; j++) {
|
||||
let networkNode = network.networkNodes[j]
|
||||
installInNetworkNode(networkNode)
|
||||
for (let j = 0; j < network.lanNetworkNodes.length; j++) {
|
||||
let lanNetworkNode = network.lanNetworkNodes[j]
|
||||
installInNetworkNode(lanNetworkNode)
|
||||
}
|
||||
|
||||
function installInNetworkNode(networkNode) {
|
||||
function installInNetworkNode(lanNetworkNode) {
|
||||
|
||||
let tradingSessionsCreatedArray = []
|
||||
let learningSessionsCreatedArray = []
|
||||
@@ -270,9 +270,9 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
/*
|
||||
Here we complete the missing stuff at Data Tasks
|
||||
*/
|
||||
let dataTasks = UI.projects.foundations.utilities.branches.findInBranch(networkNode, 'Data Tasks', node, true)
|
||||
let dataTasks = UI.projects.foundations.utilities.branches.findInBranch(lanNetworkNode, 'Data Tasks', node, true)
|
||||
if (dataTasks === undefined) {
|
||||
dataTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(networkNode, 'Data Tasks')
|
||||
dataTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(lanNetworkNode, 'Data Tasks')
|
||||
}
|
||||
/*
|
||||
We will make ourserves sure that the Project Data Tasks nodes are there.
|
||||
@@ -303,9 +303,9 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
/*
|
||||
Here we complete the missing stuff at Learning Tasks
|
||||
*/
|
||||
let learningTasks = UI.projects.foundations.utilities.branches.findInBranch(networkNode, 'Learning Tasks', node, true)
|
||||
let learningTasks = UI.projects.foundations.utilities.branches.findInBranch(lanNetworkNode, 'Learning Tasks', node, true)
|
||||
if (learningTasks === undefined) {
|
||||
learningTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(networkNode, 'Learning Tasks')
|
||||
learningTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(lanNetworkNode, 'Learning Tasks')
|
||||
}
|
||||
/*
|
||||
We will make ourserves sure that the Project Learning Tasks nodes are there.
|
||||
@@ -339,7 +339,7 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
|
||||
learningSessionsCreatedArray = learningSessionsCreatedArray.concat(allSessionsArray)
|
||||
|
||||
dashboardsArray.push({ environmentNode: learningTasks, networkNode: networkNode, sessionsArray: allSessionsArray })
|
||||
dashboardsArray.push({ environmentNode: learningTasks, lanNetworkNode: lanNetworkNode, sessionsArray: allSessionsArray })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -357,9 +357,9 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
/*
|
||||
Now we install the environmnet at the current Network Node
|
||||
*/
|
||||
let tradingTasks = UI.projects.foundations.utilities.branches.findInBranch(networkNode, environmentType, node, true)
|
||||
let tradingTasks = UI.projects.foundations.utilities.branches.findInBranch(lanNetworkNode, environmentType, node, true)
|
||||
if (tradingTasks === undefined) {
|
||||
tradingTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(networkNode, environmentType)
|
||||
tradingTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(lanNetworkNode, environmentType)
|
||||
}
|
||||
/*
|
||||
We will make ourserves sure that the Project Trading Tasks nodes are there.
|
||||
@@ -395,7 +395,7 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
.concat(forwardSessionsArray)
|
||||
tradingSessionsCreatedArray = tradingSessionsCreatedArray.concat(allSessionsArray)
|
||||
|
||||
dashboardsArray.push({ environmentNode: tradingTasks, networkNode: networkNode, sessionsArray: allSessionsArray })
|
||||
dashboardsArray.push({ environmentNode: tradingTasks, lanNetworkNode: lanNetworkNode, sessionsArray: allSessionsArray })
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -404,9 +404,9 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
/*
|
||||
Here we complete the missing stuff at Data Mines Data
|
||||
*/
|
||||
let dataStorage = UI.projects.foundations.utilities.branches.findInBranch(networkNode, 'Data Storage', node, true)
|
||||
let dataStorage = UI.projects.foundations.utilities.branches.findInBranch(lanNetworkNode, 'Data Storage', node, true)
|
||||
if (dataStorage === undefined) {
|
||||
dataStorage = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(networkNode, 'Data Storage')
|
||||
dataStorage = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(lanNetworkNode, 'Data Storage')
|
||||
}
|
||||
let dataMinesData = UI.projects.foundations.utilities.branches.findInBranch(dataStorage, 'Data Mines Data', node, true)
|
||||
if (dataMinesData === undefined) {
|
||||
@@ -443,9 +443,9 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
/*
|
||||
Here we complete the missing stuff at Data Mines Data
|
||||
*/
|
||||
let dataStorage = UI.projects.foundations.utilities.branches.findInBranch(networkNode, 'Data Storage', node, true)
|
||||
let dataStorage = UI.projects.foundations.utilities.branches.findInBranch(lanNetworkNode, 'Data Storage', node, true)
|
||||
if (dataStorage === undefined) {
|
||||
dataStorage = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(networkNode, 'Data Storage')
|
||||
dataStorage = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(lanNetworkNode, 'Data Storage')
|
||||
}
|
||||
let learningMinesData = UI.projects.foundations.utilities.branches.findInBranch(dataStorage, 'Learning Mines Data', node, true)
|
||||
if (learningMinesData === undefined) {
|
||||
@@ -498,9 +498,9 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
/*
|
||||
Here we complete the missing stuff at Data Mines Data
|
||||
*/
|
||||
let dataStorage = UI.projects.foundations.utilities.branches.findInBranch(networkNode, 'Data Storage', node, true)
|
||||
let dataStorage = UI.projects.foundations.utilities.branches.findInBranch(lanNetworkNode, 'Data Storage', node, true)
|
||||
if (dataStorage === undefined) {
|
||||
dataStorage = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(networkNode, 'Data Storage')
|
||||
dataStorage = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(lanNetworkNode, 'Data Storage')
|
||||
}
|
||||
let tradingMinesData = UI.projects.foundations.utilities.branches.findInBranch(dataStorage, 'Trading Mines Data', node, true)
|
||||
if (tradingMinesData === undefined) {
|
||||
@@ -575,7 +575,7 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
*/
|
||||
let arrayItem = dashboardsArray[i]
|
||||
let dashboard = UI.projects.foundations.utilities.nodeChildren.findOrCreateChildWithReference(projectDashboards, 'Dashboard', arrayItem.environmentNode)
|
||||
dashboard.name = arrayItem.environmentNode.type + ' ' + arrayItem.networkNode.name
|
||||
dashboard.name = arrayItem.environmentNode.type + ' ' + arrayItem.lanNetworkNode.name
|
||||
/*
|
||||
We delete all the existing Time Machines related to the market we are currently installing.
|
||||
For that, we make a new array with the existing Time Machines so that the deleting
|
||||
@@ -611,7 +611,7 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
*/
|
||||
for (let j = 0; j < arrayItem.sessionsArray.length; j++) {
|
||||
let session = arrayItem.sessionsArray[j]
|
||||
UI.projects.foundations.functionLibraries.chartingSpaceFunctions.createTimeMachine(dashboard, session, node, arrayItem.networkNode, rootNodes)
|
||||
UI.projects.foundations.functionLibraries.chartingSpaceFunctions.createTimeMachine(dashboard, session, node, arrayItem.lanNetworkNode, rootNodes)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -678,7 +678,7 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
/* Scan Networks for the market being unistalled to delete it. */
|
||||
for (let i = 0; i < rootNodes.length; i++) {
|
||||
let rootNode = rootNodes[i]
|
||||
if (rootNode.type === 'Network') {
|
||||
if (rootNode.type === 'LAN Network') {
|
||||
uninstallInNetwork(rootNode)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,13 +104,13 @@ function newFoundationsFunctionLibraryDataStorageFunctions() {
|
||||
}
|
||||
|
||||
function addMissingTradingSessionReferences(node, rootNodes) {
|
||||
let networkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(node, 'Network Node', undefined, true, false, true, false)
|
||||
if (networkNode === undefined) { return }
|
||||
let lanNetworkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(node, 'LAN Network Node', undefined, true, false, true, false)
|
||||
if (lanNetworkNode === undefined) { return }
|
||||
|
||||
let backtestingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Backtesting Session')
|
||||
let fordwardTestingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Forward Testing Session')
|
||||
let paperTradingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Paper Trading Session')
|
||||
let liveTradingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Live Trading Session')
|
||||
let backtestingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Backtesting Session')
|
||||
let fordwardTestingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Forward Testing Session')
|
||||
let paperTradingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Paper Trading Session')
|
||||
let liveTradingSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Live Trading Session')
|
||||
|
||||
addMissingSession(backtestingSessionsArray)
|
||||
addMissingSession(fordwardTestingSessionsArray)
|
||||
@@ -131,11 +131,11 @@ function newFoundationsFunctionLibraryDataStorageFunctions() {
|
||||
}
|
||||
|
||||
function addMissingLearningSessionReferences(node, rootNodes) {
|
||||
let networkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(node, 'Network Node', undefined, true, false, true, false)
|
||||
if (networkNode === undefined) { return }
|
||||
let lanNetworkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(node, 'LAN Network Node', undefined, true, false, true, false)
|
||||
if (lanNetworkNode === undefined) { return }
|
||||
|
||||
let backLearningSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Back Learning Session')
|
||||
let liveLearningSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(networkNode, 'Live Learning Session')
|
||||
let backLearningSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Back Learning Session')
|
||||
let liveLearningSessionsArray = UI.projects.foundations.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Live Learning Session')
|
||||
|
||||
addMissingSession(backLearningSessionsArray)
|
||||
addMissingSession(liveLearningSessionsArray)
|
||||
|
||||
@@ -13,13 +13,13 @@ function newFoundationsFunctionLibraryLearningSessionFunctions() {
|
||||
/* If something fails at validations we just quit. */
|
||||
return
|
||||
}
|
||||
let networkNode = validationsResult.networkNode
|
||||
if (networkNode === undefined) {
|
||||
let lanNetworkNode = validationsResult.lanNetworkNode
|
||||
if (lanNetworkNode === undefined) {
|
||||
/* Nodes that do not belong to a network can not get ready. */
|
||||
return
|
||||
}
|
||||
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id)
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
|
||||
|
||||
/* First we setup everything so as to listen to the response from the Task Server */
|
||||
let eventSubscriptionIdOnStatus
|
||||
@@ -47,14 +47,14 @@ function newFoundationsFunctionLibraryLearningSessionFunctions() {
|
||||
/* If something fails at validations we just quit. */
|
||||
return
|
||||
}
|
||||
let networkNode = validationsResult.networkNode
|
||||
if (networkNode === undefined) {
|
||||
let lanNetworkNode = validationsResult.lanNetworkNode
|
||||
if (lanNetworkNode === undefined) {
|
||||
/* This means that the validations failed. */
|
||||
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
||||
return
|
||||
}
|
||||
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id)
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
|
||||
|
||||
node.payload.uiObject.run(eventsServerClient, callBackFunction)
|
||||
|
||||
@@ -174,14 +174,14 @@ function newFoundationsFunctionLibraryLearningSessionFunctions() {
|
||||
/* If something fails at validations we just quit. */
|
||||
return
|
||||
}
|
||||
let networkNode = validationsResult.networkNode
|
||||
if (networkNode === undefined) {
|
||||
let lanNetworkNode = validationsResult.lanNetworkNode
|
||||
if (lanNetworkNode === undefined) {
|
||||
/* This means that the validations failed. */
|
||||
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
||||
return
|
||||
}
|
||||
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id)
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
|
||||
|
||||
let key = node.name + '-' + node.type + '-' + node.id
|
||||
eventsServerClient.raiseEvent(key, 'Stop Learning Session')
|
||||
@@ -240,7 +240,7 @@ function newFoundationsFunctionLibraryLearningSessionFunctions() {
|
||||
return
|
||||
}
|
||||
|
||||
result.networkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(result.taskManager, 'Network Node', undefined, true, false, true, false)
|
||||
result.lanNetworkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(result.taskManager, 'LAN Network Node', undefined, true, false, true, false)
|
||||
|
||||
if (node.learningSystemReference === undefined) {
|
||||
node.payload.uiObject.setErrorMessage('Session needs a child Learning System Reference.')
|
||||
|
||||
@@ -56,13 +56,13 @@ function newFoundationsFunctionLibraryTaskFunctions() {
|
||||
return thisObject
|
||||
|
||||
function syncronizeTaskWithBackEnd(node) {
|
||||
let networkNode = validations(node)
|
||||
if (networkNode === undefined) {
|
||||
let lanNetworkNode = validations(node)
|
||||
if (lanNetworkNode === undefined) {
|
||||
/* Nodes that do not belong to a network can not get ready. */
|
||||
return
|
||||
}
|
||||
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id)
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
|
||||
|
||||
/* First we setup everything so as to listen to the response from the Task Manger */
|
||||
let eventSubscriptionIdOnStatus
|
||||
@@ -90,14 +90,14 @@ function newFoundationsFunctionLibraryTaskFunctions() {
|
||||
|
||||
function runTask(node, isDebugging, callBackFunction) {
|
||||
|
||||
let networkNode = validations(node)
|
||||
if (networkNode === undefined) {
|
||||
let lanNetworkNode = validations(node)
|
||||
if (lanNetworkNode === undefined) {
|
||||
/* This means that the validations failed. */
|
||||
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
||||
return
|
||||
}
|
||||
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id)
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
|
||||
|
||||
for (let i = 0; i < node.bot.processes.length; i++) {
|
||||
let process = node.bot.processes[i]
|
||||
@@ -161,7 +161,7 @@ function newFoundationsFunctionLibraryTaskFunctions() {
|
||||
|
||||
let taskDefinition = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(node, false, true, true, false, false, taskLightingPath)
|
||||
|
||||
let networkLightingPath = '->Network->Network Node->' +
|
||||
let networkLightingPath = '->LAN Network->LAN Network Node->' +
|
||||
'Data Storage->' +
|
||||
'Data Mines Data->Trading Mines Data->Learning Mines Data->' +
|
||||
'Project Data Products->Project Trading Products->Project Learning Products->' +
|
||||
@@ -185,7 +185,7 @@ function newFoundationsFunctionLibraryTaskFunctions() {
|
||||
'Market->' +
|
||||
'Process Definition->'
|
||||
|
||||
let networkDefinition = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(networkNode.payload.parentNode, false, true, true, false, false, networkLightingPath)
|
||||
let networkDefinition = UI.projects.foundations.functionLibraries.protocolNode.getProtocolNode(lanNetworkNode.payload.parentNode, false, true, true, false, false, networkLightingPath)
|
||||
|
||||
/*
|
||||
We will also send all the project schemas we have to the Task Server.
|
||||
@@ -218,13 +218,13 @@ function newFoundationsFunctionLibraryTaskFunctions() {
|
||||
}
|
||||
|
||||
function stopTask(node, callBackFunction) {
|
||||
let networkNode = validations(node)
|
||||
if (networkNode === undefined) {
|
||||
let lanNetworkNode = validations(node)
|
||||
if (lanNetworkNode === undefined) {
|
||||
/* This means that the validations failed. */
|
||||
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
||||
return
|
||||
}
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id)
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
|
||||
|
||||
let event = {
|
||||
taskId: node.id,
|
||||
@@ -288,24 +288,24 @@ function newFoundationsFunctionLibraryTaskFunctions() {
|
||||
return
|
||||
}
|
||||
|
||||
let networkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(taskManager, 'Network Node', undefined, true, false, true, false)
|
||||
let lanNetworkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(taskManager, 'LAN Network Node', undefined, true, false, true, false)
|
||||
|
||||
if (UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(networkNode.payload, 'host') === undefined) {
|
||||
if (UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(lanNetworkNode.payload, 'host') === undefined) {
|
||||
node.payload.uiObject.setErrorMessage('Network Node needs to have a valid Host property at its config.')
|
||||
return
|
||||
}
|
||||
|
||||
if (UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(networkNode.payload, 'webPort') === undefined) {
|
||||
if (UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(lanNetworkNode.payload, 'webPort') === undefined) {
|
||||
node.payload.uiObject.setErrorMessage('Network Node needs to have a valid webPort property at its config.')
|
||||
return
|
||||
}
|
||||
|
||||
if (UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(networkNode.payload, 'webSocketsPort') === undefined) {
|
||||
if (UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(lanNetworkNode.payload, 'webSocketsPort') === undefined) {
|
||||
node.payload.uiObject.setErrorMessage('Network Node needs to have a valid webSocketsPort property at its config.')
|
||||
return
|
||||
}
|
||||
|
||||
return networkNode
|
||||
return lanNetworkNode
|
||||
}
|
||||
|
||||
function runAllTasks(taskManager) {
|
||||
|
||||
@@ -13,13 +13,13 @@ function newFoundationsFunctionLibraryTradingSessionFunctions() {
|
||||
/* If something fails at validations we just quit. */
|
||||
return
|
||||
}
|
||||
let networkNode = validationsResult.networkNode
|
||||
if (networkNode === undefined) {
|
||||
let lanNetworkNode = validationsResult.lanNetworkNode
|
||||
if (lanNetworkNode === undefined) {
|
||||
/* Nodes that do not belong to a network can not get ready. */
|
||||
return
|
||||
}
|
||||
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id)
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
|
||||
|
||||
/* First we setup everything so as to listen to the response from the Task Server */
|
||||
let eventSubscriptionIdOnStatus
|
||||
@@ -47,14 +47,14 @@ function newFoundationsFunctionLibraryTradingSessionFunctions() {
|
||||
/* If something fails at validations we just quit. */
|
||||
return
|
||||
}
|
||||
let networkNode = validationsResult.networkNode
|
||||
if (networkNode === undefined) {
|
||||
let lanNetworkNode = validationsResult.lanNetworkNode
|
||||
if (lanNetworkNode === undefined) {
|
||||
/* This means that the validations failed. */
|
||||
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
||||
return
|
||||
}
|
||||
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id)
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
|
||||
|
||||
let key = node.name + '-' + node.type + '-' + node.id
|
||||
|
||||
@@ -200,14 +200,14 @@ function newFoundationsFunctionLibraryTradingSessionFunctions() {
|
||||
/* If something fails at validations we just quit. */
|
||||
return
|
||||
}
|
||||
let networkNode = validationsResult.networkNode
|
||||
if (networkNode === undefined) {
|
||||
let lanNetworkNode = validationsResult.lanNetworkNode
|
||||
if (lanNetworkNode === undefined) {
|
||||
/* This means that the validations failed. */
|
||||
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
||||
return
|
||||
}
|
||||
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id)
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(lanNetworkNode.id)
|
||||
|
||||
let key = node.name + '-' + node.type + '-' + node.id
|
||||
eventsServerClient.raiseEvent(key, 'Stop Trading Session')
|
||||
@@ -266,7 +266,7 @@ function newFoundationsFunctionLibraryTradingSessionFunctions() {
|
||||
return
|
||||
}
|
||||
|
||||
result.networkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(result.taskManager, 'Network Node', undefined, true, false, true, false)
|
||||
result.lanNetworkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(result.taskManager, 'LAN Network Node', undefined, true, false, true, false)
|
||||
|
||||
if (node.tradingSystemReference === undefined) {
|
||||
node.payload.uiObject.setErrorMessage('Session needs a child Trading System Reference.')
|
||||
|
||||
@@ -426,6 +426,21 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() {
|
||||
) {
|
||||
node.project = 'Foundations'
|
||||
}
|
||||
/* Migration code from beta 11 to beta 12 */
|
||||
if (
|
||||
node.type === 'Network'
|
||||
) {
|
||||
node.type = "LAN Network"
|
||||
if (node.lanNetworkNodes === undefined && node.networkNodes !== undefined) {
|
||||
node.lanNetworkNodes = node.networkNodes
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
node.type === 'Network Node'
|
||||
) {
|
||||
node.type = "LAN Network Node"
|
||||
}
|
||||
/*
|
||||
This function can be called with a positionOffset to change the node
|
||||
saved position and all of its descendants positions as well with an
|
||||
|
||||
@@ -171,12 +171,12 @@ function newPlottersManager() {
|
||||
}
|
||||
}
|
||||
|
||||
let host = layer.networkNode.config.host
|
||||
let webPort = layer.networkNode.config.webPort
|
||||
let host = layer.lanNetworkNode.config.host
|
||||
let webPort = layer.lanNetworkNode.config.webPort
|
||||
if (host === undefined) { host = window.location.hostname }
|
||||
if (webPort === undefined) { webPort = window.location.port }
|
||||
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(layer.networkNode.id)
|
||||
let eventsServerClient = UI.projects.foundations.spaces.designSpace.workspace.eventsServerClients.get(layer.lanNetworkNode.id)
|
||||
|
||||
storage.initialize(
|
||||
mine,
|
||||
|
||||
@@ -18,6 +18,7 @@ function newWorkspace() {
|
||||
share: shareWorkspace,
|
||||
getNodesByTypeAndHierarchyHeadsType: getNodesByTypeAndHierarchyHeadsType,
|
||||
getProjectsHeads: getProjectsHeads,
|
||||
getProjectHeadByNodeType: getProjectHeadByNodeType,
|
||||
getHierarchyHeads: getHierarchyHeads,
|
||||
getHierarchyHeadsById: getHierarchyHeadsById,
|
||||
getHierarchyHeadsByCodeNameAndNodeType: getHierarchyHeadsByCodeNameAndNodeType,
|
||||
@@ -143,15 +144,15 @@ function newWorkspace() {
|
||||
for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) {
|
||||
let rootNode = thisObject.workspaceNode.rootNodes[i]
|
||||
|
||||
if (rootNode.type === 'Network') {
|
||||
if (rootNode.networkNodes === undefined) { continue }
|
||||
for (let j = 0; j < rootNode.networkNodes.length; j++) {
|
||||
let networkNode = rootNode.networkNodes[j]
|
||||
if (rootNode.type === 'LAN Network') {
|
||||
if (rootNode.lanNetworkNodes === undefined) { continue }
|
||||
for (let j = 0; j < rootNode.lanNetworkNodes.length; j++) {
|
||||
let lanNetworkNode = rootNode.lanNetworkNodes[j]
|
||||
|
||||
let eventsServerClient = newEventsServerClient(networkNode)
|
||||
let eventsServerClient = newEventsServerClient(lanNetworkNode)
|
||||
eventsServerClient.initialize()
|
||||
|
||||
thisObject.eventsServerClients.set(networkNode.id, eventsServerClient)
|
||||
thisObject.eventsServerClients.set(lanNetworkNode.id, eventsServerClient)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -473,25 +474,25 @@ function newWorkspace() {
|
||||
function stopAllRunningTasks() {
|
||||
for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) {
|
||||
let rootNode = thisObject.workspaceNode.rootNodes[i]
|
||||
if (rootNode.type === 'Network') {
|
||||
if (rootNode.networkNodes !== undefined) {
|
||||
for (let j = 0; j < rootNode.networkNodes.length; j++) {
|
||||
let networkNode = rootNode.networkNodes[j]
|
||||
if (networkNode.dataTasks !== undefined && networkNode.dataTasks.payload !== undefined) {
|
||||
networkNode.dataTasks.payload.uiObject.menu.internalClick('Stop All Exchange Data Tasks')
|
||||
networkNode.dataTasks.payload.uiObject.menu.internalClick('Stop All Exchange Data Tasks')
|
||||
if (rootNode.type === 'LAN Network') {
|
||||
if (rootNode.lanNetworkNodes !== undefined) {
|
||||
for (let j = 0; j < rootNode.lanNetworkNodes.length; j++) {
|
||||
let lanNetworkNode = rootNode.lanNetworkNodes[j]
|
||||
if (lanNetworkNode.dataTasks !== undefined && lanNetworkNode.dataTasks.payload !== undefined) {
|
||||
lanNetworkNode.dataTasks.payload.uiObject.menu.internalClick('Stop All Exchange Data Tasks')
|
||||
lanNetworkNode.dataTasks.payload.uiObject.menu.internalClick('Stop All Exchange Data Tasks')
|
||||
}
|
||||
if (networkNode.learningTasks !== undefined && networkNode.learningTasks.payload !== undefined) {
|
||||
networkNode.learningTasks.payload.uiObject.menu.internalClick('Stop All Exchange Learning Tasks')
|
||||
networkNode.learningTasks.payload.uiObject.menu.internalClick('Stop All Exchange Learning Tasks')
|
||||
if (lanNetworkNode.learningTasks !== undefined && lanNetworkNode.learningTasks.payload !== undefined) {
|
||||
lanNetworkNode.learningTasks.payload.uiObject.menu.internalClick('Stop All Exchange Learning Tasks')
|
||||
lanNetworkNode.learningTasks.payload.uiObject.menu.internalClick('Stop All Exchange Learning Tasks')
|
||||
}
|
||||
if (networkNode.testingTradingTasks !== undefined && networkNode.testingTradingTasks.payload !== undefined) {
|
||||
networkNode.testingTradingTasks.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks')
|
||||
networkNode.testingTradingTasks.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks')
|
||||
if (lanNetworkNode.testingTradingTasks !== undefined && lanNetworkNode.testingTradingTasks.payload !== undefined) {
|
||||
lanNetworkNode.testingTradingTasks.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks')
|
||||
lanNetworkNode.testingTradingTasks.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks')
|
||||
}
|
||||
if (networkNode.productionTradingTasks !== undefined && networkNode.productionTradingTasks.payload !== undefined) {
|
||||
networkNode.productionTradingTasks.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks')
|
||||
networkNode.productionTradingTasks.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks')
|
||||
if (lanNetworkNode.productionTradingTasks !== undefined && lanNetworkNode.productionTradingTasks.payload !== undefined) {
|
||||
lanNetworkNode.productionTradingTasks.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks')
|
||||
lanNetworkNode.productionTradingTasks.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks')
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -547,6 +548,17 @@ function newWorkspace() {
|
||||
return nodes
|
||||
}
|
||||
|
||||
function getProjectHeadByNodeType(nodeType) {
|
||||
let projectHeads = getProjectsHeads()
|
||||
if (projectHeads === undefined) { return }
|
||||
for (let i = 0; i < projectHeads.length; i++) {
|
||||
let hierarchyHead = projectHeads[i]
|
||||
if (hierarchyHead.type === nodeType) {
|
||||
return hierarchyHead
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getHierarchyHeadsById(nodeId) {
|
||||
let hierarchyHeads = getHierarchyHeads()
|
||||
if (hierarchyHeads === undefined) { return }
|
||||
|
||||
@@ -107,7 +107,7 @@ function newCircularMenu() {
|
||||
}
|
||||
|
||||
/* There are 4 possible rings of icons, we will go through each of them here. */
|
||||
let amplitudeArray = [80, 50, 40, 80]
|
||||
let amplitudeArray = [80, 70, 40, 80]
|
||||
let initialAngleArray = [220, 205, 200, 180]
|
||||
for (let j = 1; j < ringsArray.length + 1; j++) {
|
||||
let iconOnlyArray = ringsArray[j - 1]
|
||||
|
||||
@@ -272,7 +272,7 @@ function newFoundationsFloatingSpace() {
|
||||
payload.node.type === 'Learning System' ||
|
||||
payload.node.type === 'Trading Engine' ||
|
||||
payload.node.type === 'Learning Engine' ||
|
||||
payload.node.type === 'Network' ||
|
||||
payload.node.type === 'LAN Network' ||
|
||||
payload.node.type === 'Crypto Ecosystem' ||
|
||||
payload.node.type === 'Charting Space' ||
|
||||
payload.node.type === 'Data Mine' ||
|
||||
@@ -668,6 +668,10 @@ function newFoundationsFloatingSpace() {
|
||||
newVector.x = newPosition.x - thisObject.floatingObjetSaved.payload.position.x
|
||||
newVector.y = newPosition.y - thisObject.floatingObjetSaved.payload.position.y
|
||||
|
||||
thisObject.floatingObjetSaved.payload.position = {}
|
||||
thisObject.floatingObjetSaved.payload.position.x = position.x
|
||||
thisObject.floatingObjetSaved.payload.position.y = position.y
|
||||
|
||||
thisObject.floatingObjetSaved.container.displace(newVector)
|
||||
UI.projects.foundations.spaces.cockpitSpace.setStatus('Type : [' + UI.projects.foundations.spaces.floatingSpace.floatingObjetSaved.payload.node.type + '] , Name : [' + UI.projects.foundations.spaces.floatingSpace.floatingObjetSaved.payload.node.name + '] -> Snapped to new position', 100, UI.projects.foundations.spaces.cockpitSpace.statusTypes.ALL_GOOD)
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@ function newUiObjectConstructor() {
|
||||
)
|
||||
menuItemsInitialValues.push(
|
||||
{
|
||||
action: 'Change Distance to Paarent',
|
||||
action: 'Change Distance to Parent',
|
||||
actionFunction: floatingObject.distanceToParentToggle,
|
||||
actionStatus: floatingObject.getDistanceToParent,
|
||||
currentStatus: true,
|
||||
|
||||
@@ -23,7 +23,7 @@ function newLayer() {
|
||||
plotterTypeIcon: undefined,
|
||||
baseAssetIcon: undefined,
|
||||
quotedAssetIcon: undefined,
|
||||
networkNode: undefined,
|
||||
lanNetworkNode: undefined,
|
||||
checkStatusAtShutDown: checkStatusAtShutDown,
|
||||
physics: physics,
|
||||
draw: draw,
|
||||
@@ -132,7 +132,7 @@ function newLayer() {
|
||||
thisObject.plotterTypeIcon = undefined
|
||||
thisObject.baseAssetIcon = undefined
|
||||
thisObject.quotedAssetIcon = undefined
|
||||
thisObject.networkNode = undefined
|
||||
thisObject.lanNetworkNode = undefined
|
||||
thisObject.bot = undefined
|
||||
thisObject.productDefinition = undefined
|
||||
thisObject.mine = undefined
|
||||
@@ -166,8 +166,8 @@ function newLayer() {
|
||||
'Market Trading Products->Exchange Trading Products->' +
|
||||
'Market Learning Products->Exchange Learning Products->' +
|
||||
'Project Data Products->Project Learning Products->Project Trading Products->' +
|
||||
'Data Mines Data->Trading Mines Data->Learning Mines Data->Data Storage->Network Node->' +
|
||||
'Data Storage->Network Node->' +
|
||||
'Data Mines Data->Trading Mines Data->Learning Mines Data->Data Storage->LAN Network Node->' +
|
||||
'Data Storage->LAN Network Node->' +
|
||||
'Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->' +
|
||||
'Back Learning Session->Live Learning Session->' +
|
||||
'Trading System Reference->Trading Engine Reference->Trading System->Trading Engine->' +
|
||||
@@ -285,8 +285,8 @@ function newLayer() {
|
||||
return
|
||||
}
|
||||
|
||||
thisObject.networkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Network Node', undefined, false, true, true, true)
|
||||
if (thisObject.networkNode === undefined) {
|
||||
thisObject.lanNetworkNode = UI.projects.foundations.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'LAN Network Node', undefined, false, true, true, true)
|
||||
if (thisObject.lanNetworkNode === undefined) {
|
||||
thisObject.payload.uiObject.setErrorMessage('Network Node not Found')
|
||||
return
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
@@ -26325,13 +26325,13 @@
|
||||
"assetClasses": [
|
||||
{
|
||||
"type": "Asset Class",
|
||||
"name": "Network",
|
||||
"name": "LAN Network",
|
||||
"config": "{\"codeName\":\"Network\"}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [
|
||||
{
|
||||
"type": "Asset Class",
|
||||
"name": "Network",
|
||||
"name": "LAN Network",
|
||||
"config": "{\"codeName\":\"Network\"}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
@@ -50044,13 +50044,13 @@
|
||||
"assetClasses": [
|
||||
{
|
||||
"type": "Asset Class",
|
||||
"name": "Network",
|
||||
"name": "LAN Network",
|
||||
"config": "{\"codeName\":\"Network\"}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [
|
||||
{
|
||||
"type": "Asset Class",
|
||||
"name": "Network",
|
||||
"name": "LAN Network",
|
||||
"config": "{\"codeName\":\"Network\"}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
|
||||
@@ -10,36 +10,6 @@
|
||||
"config": "{\n \"folderPath\": \"\"\n}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [
|
||||
{
|
||||
"type": "Asset Class",
|
||||
"name": "Icons",
|
||||
"config": "{\n \"folderPath\": \"Governance/Icons\"\n}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "a35f2db5-a433-42bc-987f-e80c753dd884",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 25339.70509831248,
|
||||
"y": 46730.58557568774
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 25096.999999999996,
|
||||
"y": 46554.25
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Asset Class",
|
||||
"name": "GIFs",
|
||||
@@ -50,8 +20,8 @@
|
||||
"id": "147924a4-312e-4835-819d-3c241ef20936",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 25189.70509831248,
|
||||
"y": 46839.56695488855
|
||||
"x": 25339.70509831248,
|
||||
"y": 46730.58557568774
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 25096.999999999996,
|
||||
@@ -80,7 +50,7 @@
|
||||
"id": "c392025a-2fc6-4d2a-8655-fc8a8db9057e",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 25004.294901687514,
|
||||
"x": 25189.70509831248,
|
||||
"y": 46839.56695488855
|
||||
},
|
||||
"targetPosition": {
|
||||
@@ -108,6 +78,67 @@
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "e97681b3-75d1-4661-9ca3-b10a631ee5e2",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 25004.294901687514,
|
||||
"y": 46839.56695488855
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 25096.999999999996,
|
||||
"y": 46554.25
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Asset Class",
|
||||
"name": "Icons",
|
||||
"config": "{\n \"folderPath\": \"Governance/Icons\"\n}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [
|
||||
{
|
||||
"type": "Asset",
|
||||
"name": "Beta 10 & Beta 11 Icons Package",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "b63ee118-bb2d-4071-b25e-ee41b6b6fb8e",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 24611.58980337503,
|
||||
"y": 46906.921151375485
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 24854.294901687514,
|
||||
"y": 46730.58557568774
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "88e4c021-476a-4020-8db1-c5502792572e",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 24854.294901687514,
|
||||
|
||||
@@ -30,15 +30,15 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "3bfd7674-c175-476e-a6e9-9bfe120e2f7c",
|
||||
"id": "3312dc3f-9077-4259-a647-2e6170f140c9",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20419.717403378017,
|
||||
"y": 37946.97225211328
|
||||
"x": 21013.717403378017,
|
||||
"y": 38131.97225211328
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20207.585369022054,
|
||||
"y": 38159.10428646924
|
||||
"x": 20801.585369022054,
|
||||
"y": 38344.10428646924
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -60,15 +60,15 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "e892f30f-5185-4d94-8db8-2c7bd8b86368",
|
||||
"id": "98d6762c-db0f-4a59-8802-b3c1bbe01e34",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20497.363116908775,
|
||||
"y": 38236.75
|
||||
"x": 21091.363116908775,
|
||||
"y": 38421.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20207.585369022054,
|
||||
"y": 38159.10428646924
|
||||
"x": 20801.585369022054,
|
||||
"y": 38344.10428646924
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -84,15 +84,15 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "3e0a4e42-e787-47bd-9797-d83b50a768a4",
|
||||
"id": "4d687367-8b83-4cbb-a516-ab20fe63ceeb",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20207.585369022054,
|
||||
"y": 38159.10428646924
|
||||
"x": 20801.585369022054,
|
||||
"y": 38344.10428646924
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19917.807621135333,
|
||||
"y": 38236.75
|
||||
"x": 20511.807621135333,
|
||||
"y": 38421.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -121,15 +121,135 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "e8819534-2d2c-4783-8cb7-f88858877d93",
|
||||
"id": "7fdc12ee-47d6-4b78-81a6-cc5a3922fa96",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20437.422863406,
|
||||
"y": 38536.75
|
||||
"x": 21031.422863406,
|
||||
"y": 38421.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20177.615242270665,
|
||||
"y": 38386.75
|
||||
"x": 20771.615242270665,
|
||||
"y": 38571.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Asset",
|
||||
"name": "Superalgos Beta 11 : Taking the Data Mining Infrastructure to the Next Level",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "790bdb18-3b99-4e27-b8d8-960e2267c8ec",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 21071.615242270665,
|
||||
"y": 38571.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20771.615242270665,
|
||||
"y": 38571.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Asset",
|
||||
"name": "Entropy as a Calculation Basis for Market Trends: The Advanced Trend Indicator in Superalgos",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "f5ac9a2c-defb-4ad0-aef4-b78b59c494b6",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 21031.422863406,
|
||||
"y": 38721.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20771.615242270665,
|
||||
"y": 38571.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Asset",
|
||||
"name": "Implementing a Monte-Carlo Forecast of the Next Period of an Asset in Superalgos",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "2dcebd7c-6f45-4074-8b1b-e981b3b3dee7",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20921.615242270665,
|
||||
"y": 38831.55762113533
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20771.615242270665,
|
||||
"y": 38571.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Asset",
|
||||
"name": "NewNew high quality indicators for Superalgos Beta 11Asset",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "1bf7938b-2fb6-4766-8507-a384849efbce",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20771.615242270665,
|
||||
"y": 38871.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20771.615242270665,
|
||||
"y": 38571.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -145,20 +265,20 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "70c9e68f-c0f2-4e16-9dab-d0f816c23193",
|
||||
"id": "d8d73b90-ed75-4e83-93a1-50605e9e9b40",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20177.615242270665,
|
||||
"y": 38386.75
|
||||
"x": 20771.615242270665,
|
||||
"y": 38571.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19917.807621135333,
|
||||
"y": 38236.75
|
||||
"x": 20511.807621135333,
|
||||
"y": 38421.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"isCollapsed": true,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
@@ -182,15 +302,15 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "d324f79d-a7a2-4b59-9548-20b64a4e34bd",
|
||||
"id": "b0f13061-3280-451c-aefd-b61ff9a040fd",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20073.099048196847,
|
||||
"y": 38816.30549577344
|
||||
"x": 20667.099048196847,
|
||||
"y": 39001.30549577344
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19995.45333466609,
|
||||
"y": 38526.52774788672
|
||||
"x": 20589.45333466609,
|
||||
"y": 38711.52774788672
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -206,15 +326,15 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "35277463-b778-4c43-85f0-eebdfe398198",
|
||||
"id": "b93cbd1b-3aa0-4081-b538-6407754fb6fc",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19995.45333466609,
|
||||
"y": 38526.52774788672
|
||||
"x": 20589.45333466609,
|
||||
"y": 38711.52774788672
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19917.807621135333,
|
||||
"y": 38236.75
|
||||
"x": 20511.807621135333,
|
||||
"y": 38421.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -231,20 +351,20 @@
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"id": "361efd8b-cfdf-44bc-a11b-ad07fe5e38c8",
|
||||
"id": "d25642e4-49ca-4b2d-a479-8b0012b987b2",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19917.807621135333,
|
||||
"y": 38236.75
|
||||
"x": 20511.807621135333,
|
||||
"y": 38421.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19658,
|
||||
"y": 38086.75
|
||||
"x": 20252,
|
||||
"y": 38271.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": true,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
@@ -280,7 +400,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "801da9b4-69da-40cf-9058-a59aa874bb20",
|
||||
"id": "30a2f056-8493-427f-ad07-3bc34ec7802b",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19239.728644668176,
|
||||
@@ -304,7 +424,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "51852149-bc7a-4b20-8c62-ba610f1f05af",
|
||||
"id": "bbb433cd-abab-48f5-8d30-c71c98c5ec1c",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19192.798305156106,
|
||||
@@ -341,7 +461,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "591ba012-586d-4d7f-a2bd-a9f20a30fd90",
|
||||
"id": "2cb2726d-bdb6-49ef-bc87-bf9fd9b28db2",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 18873.47366580031,
|
||||
@@ -365,7 +485,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "fc766d7c-6855-4765-b95e-3c5934cad5e4",
|
||||
"id": "58780932-3d88-4042-a478-c4db5c1ff8b1",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19009.670815722173,
|
||||
@@ -402,7 +522,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "1dd73db7-8205-4bd5-9ae7-686650229b25",
|
||||
"id": "4ae0b507-4214-49ea-a9e5-a56365b4a043",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 18611.264051131016,
|
||||
@@ -426,7 +546,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "5db66d5f-c71f-4828-97f2-d7cd9863bbcd",
|
||||
"id": "f25649ab-867f-4587-a676-a9c742e96f01",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 18878.566008387526,
|
||||
@@ -463,7 +583,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "a5bdea2f-384a-4d66-b233-1a10022c1a75",
|
||||
"id": "2709f5d3-06e8-41e1-bfac-79aad3f3c74f",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 18553.254961286955,
|
||||
@@ -487,7 +607,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "19caa58e-01e9-4811-aba6-e6ad9cd571ed",
|
||||
"id": "e4ffe593-0c4b-4997-9ffd-832a0e3170cf",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 18849.561463465496,
|
||||
@@ -512,7 +632,7 @@
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"id": "3ad7b667-a09d-4f4a-9363-ea6e4216356a",
|
||||
"id": "433aef3f-29ac-42b3-a917-3e5124db55b5",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19145.867965644036,
|
||||
@@ -555,7 +675,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "9dee6dff-f658-439f-8e12-0aab40f075cc",
|
||||
"id": "a40d48ba-8f99-45ff-96d2-792aa0b22efa",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7866.613470484037,
|
||||
@@ -579,7 +699,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "bf32af8b-d249-462f-ba81-f3269c9f5a1f",
|
||||
"id": "ba9d0dfc-8678-4af8-8fa8-19c1ddd46357",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7993.398949006245,
|
||||
@@ -616,7 +736,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "9109ae37-eb9e-4f92-92bd-e2e56340adaf",
|
||||
"id": "e0c258ee-a96f-406f-a63e-b2ce8a4c521d",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7556.368855056906,
|
||||
@@ -640,7 +760,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "2709fa87-cb67-40b3-b85c-ef2a6acffa26",
|
||||
"id": "622d7b16-62dd-4ce4-b00c-ab4b14969a32",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7838.276641292679,
|
||||
@@ -677,7 +797,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "658ba678-a890-4df0-a567-9db7362db051",
|
||||
"id": "1dcc76e5-ca31-4fbb-9451-b8c37d4f9382",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7576.399755306462,
|
||||
@@ -701,7 +821,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "6869158d-251a-42a9-9690-2e9330e679f6",
|
||||
"id": "5fc3b441-ba0a-45b3-a25f-ac078a9fb59e",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7848.292091417457,
|
||||
@@ -726,7 +846,7 @@
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"id": "3ab41e5e-7f2b-49b5-8185-91aae42a3886",
|
||||
"id": "b9cd6fcc-8374-4231-bd45-dd5d6a194c6d",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19058,
|
||||
@@ -769,7 +889,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "79b859a1-be36-46d1-93b3-b4130268d67a",
|
||||
"id": "b8fd0a6f-8bc6-4a78-84b9-c4614c534123",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7566.384305181684,
|
||||
@@ -793,7 +913,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "117b674b-8b19-4d2e-8f13-7a359cad566a",
|
||||
"id": "c4313d2d-819b-4613-9dc9-43214ad87ed4",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7848.292091417457,
|
||||
@@ -830,7 +950,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "59c96b16-8156-42c9-a538-7d9c12e4f8ff",
|
||||
"id": "31146e10-9cf7-4921-8208-f71205386200",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7586.41520543124,
|
||||
@@ -854,7 +974,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "d7dda9f9-f5b5-4d0e-9a9b-17f49a77ec7b",
|
||||
"id": "889b2362-7f60-4e83-a3e9-8aa873dbb34b",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7858.307541542235,
|
||||
@@ -891,7 +1011,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "6e5fa39d-d088-430c-88f5-ce72461c19e5",
|
||||
"id": "09509442-b432-4b0b-805e-f0b059c44a10",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 7924.98779165783,
|
||||
@@ -915,7 +1035,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "f7210df8-4e8b-4399-9658-f9b2b87fea05",
|
||||
"id": "4df65e60-7ef5-49d5-a230-90b89eb90f46",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 8027.59383465553,
|
||||
@@ -940,7 +1060,7 @@
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"id": "0549b410-bbb4-45f3-b3b0-d60af55da2b5",
|
||||
"id": "7ffe1f9b-388c-4117-bd8c-8ce1f213bcad",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19145.867965644036,
|
||||
@@ -965,15 +1085,15 @@
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"id": "fa5288a3-7f8e-44e0-ad9f-8f0bdd34476a",
|
||||
"id": "25684556-402b-4b27-883e-ae46c56dcf33",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19808,
|
||||
"y": 38346.55762113533
|
||||
"x": 20402,
|
||||
"y": 38531.55762113533
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19658,
|
||||
"y": 38086.75
|
||||
"x": 20252,
|
||||
"y": 38271.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -1008,7 +1128,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "54b5daca-5651-4d54-94c3-3b1c40bc928b",
|
||||
"id": "77b1a546-4d93-44d9-b252-ca6af6f2976d",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 11103,
|
||||
@@ -1032,7 +1152,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "dc919439-aa5f-441f-b725-027bde05ccca",
|
||||
"id": "96be4102-1348-4e4b-b4ac-53fb30ba5c09",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 11103,
|
||||
@@ -1069,7 +1189,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "f4b2f6d0-07cd-4105-a810-fc5b744cfc72",
|
||||
"id": "3b55a3bd-d9bd-484a-87f1-6513a8f8c65c",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 11622.615242270665,
|
||||
@@ -1093,7 +1213,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "478369a0-691a-4936-8dc5-d8841aca3a1c",
|
||||
"id": "0ed1eeb4-841c-456f-8e3d-487c107bddd4",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 11362.807621135333,
|
||||
@@ -1118,15 +1238,15 @@
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"id": "24550aaf-708d-4b42-81e4-b8eedab129c6",
|
||||
"id": "6967df4a-9414-4319-b37e-ab1b6fb2550e",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19658,
|
||||
"y": 38386.75
|
||||
"x": 20252,
|
||||
"y": 38571.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19658,
|
||||
"y": 38086.75
|
||||
"x": 20252,
|
||||
"y": 38271.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -1161,7 +1281,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "47aef9c5-ca13-4e41-84dd-2f12cd0141fa",
|
||||
"id": "a5ac468c-3d97-4253-ac98-a2fa74d40154",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19808,
|
||||
@@ -1185,7 +1305,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "ca73a870-ec32-46f0-adb9-36bcbb537027",
|
||||
"id": "20d106b6-c17d-4a06-94ce-d7adcdbaf93f",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19658,
|
||||
@@ -1222,7 +1342,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "4ae0e8ff-3df7-487c-8f58-c4267ebe2d39",
|
||||
"id": "2ea6dd32-e5b2-4efa-ad5a-78b8a6790632",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19508,
|
||||
@@ -1246,7 +1366,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "98fdc3e9-66be-4697-b20b-c454884df033",
|
||||
"id": "4edfe420-8f3a-4b72-b61a-63a3ee484ec3",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19508,
|
||||
@@ -1283,7 +1403,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "eca46431-9c33-4bdf-831c-a01af5bb39c1",
|
||||
"id": "abc3c2d1-e8e8-4050-8c4a-151ce51a2187",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19208,
|
||||
@@ -1307,7 +1427,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "2aae16b0-c8ee-4d81-a4ba-e3c8e1c74f11",
|
||||
"id": "0e616d82-2751-4c50-803d-edf543f73028",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19358,
|
||||
@@ -1344,7 +1464,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "b2c40a75-a190-418f-a92f-5d5d6d48d440",
|
||||
"id": "f1505a03-f0d6-41cb-be54-3154849a9bef",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 18988.384757729335,
|
||||
@@ -1368,7 +1488,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "478d13a2-138a-4404-8200-cec5f8300fe4",
|
||||
"id": "71617232-c490-40e2-94cd-37e097ba6bb5",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19248.192378864667,
|
||||
@@ -1405,7 +1525,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "782c046b-0590-48dd-b997-9485f70ad53a",
|
||||
"id": "c523e6e4-38b2-4ce6-8d4c-a2d413f3f2a9",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 18908,
|
||||
@@ -1429,7 +1549,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "f8e738d8-4dcb-4534-a9e7-918791e237f7",
|
||||
"id": "49ea7f0d-38a8-41a3-b62d-dec1e3c0276e",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19208,
|
||||
@@ -1454,15 +1574,15 @@
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"id": "39029972-92d3-482b-8b50-bb46487d2c02",
|
||||
"id": "6262a35c-bde9-4986-9b2d-f33b8b4ba412",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19508,
|
||||
"y": 38346.55762113533
|
||||
"x": 20102,
|
||||
"y": 38531.55762113533
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19658,
|
||||
"y": 38086.75
|
||||
"x": 20252,
|
||||
"y": 38271.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -1497,7 +1617,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "d9074fb1-335c-411b-8db5-fa2980967b83",
|
||||
"id": "00f83c16-8b45-4216-a1fa-70eea72e3a7b",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 10799.882367304679,
|
||||
@@ -1521,7 +1641,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "b78514b9-ab50-4f0a-86d1-cf86a5ce58e7",
|
||||
"id": "b6541def-a900-44f1-8e93-d0f0e6dc1c2d",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 10902.48841030238,
|
||||
@@ -1558,7 +1678,7 @@
|
||||
"project": "Governance",
|
||||
"assetClasses": [],
|
||||
"assets": [],
|
||||
"id": "47894e9c-c655-48c8-b97c-add009c60f33",
|
||||
"id": "ea84795d-c9f3-4f49-a483-bbd37fd5e727",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 11390.767019112005,
|
||||
@@ -1582,7 +1702,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "2b6bdf83-d469-47c0-bdcf-e18a5aea3c3f",
|
||||
"id": "8ead53f2-43f4-45de-a685-78ecfb460438",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 11197.930736206043,
|
||||
@@ -1607,15 +1727,15 @@
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"id": "4a0c21e9-40d8-4591-a360-137d558dc2e6",
|
||||
"id": "a4af625b-5d83-4e56-b3d6-0923c8195c27",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19398.192378864667,
|
||||
"y": 38236.75
|
||||
"x": 19992.192378864667,
|
||||
"y": 38421.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19658,
|
||||
"y": 38086.75
|
||||
"x": 20252,
|
||||
"y": 38271.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -1632,15 +1752,15 @@
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"id": "432cb865-7a76-46bb-bb52-019d9f264d66",
|
||||
"id": "441db681-78e0-42a4-aa64-1767fa73073f",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19658,
|
||||
"y": 38086.75
|
||||
"x": 20252,
|
||||
"y": 38271.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19658,
|
||||
"y": 37786.75
|
||||
"x": 20252,
|
||||
"y": 37971.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -1657,20 +1777,20 @@
|
||||
}
|
||||
],
|
||||
"assets": [],
|
||||
"id": "eeeed37c-a0e5-4d6c-a57f-01fdd8622f0f",
|
||||
"id": "0a490128-61c8-49aa-96aa-769cc5513951",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19658,
|
||||
"y": 37786.75
|
||||
"x": 20252,
|
||||
"y": 37971.75
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19658,
|
||||
"y": 37786.75
|
||||
"x": 20252,
|
||||
"y": 37971.75
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": true,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
|
||||