Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Fractalis
fractal.js
Commits
c8025339
Commit
c8025339
authored
May 16, 2017
by
Sascha Herzinger
Browse files
Adapted to new back end api
parent
f7bf4473
Changes
11
Hide whitespace changes
Inline
Side-by-side
src/components/DataBox.vue
View file @
c8025339
...
...
@@ -3,28 +3,28 @@
<label
for=
"data-window"
:tooltip=
"tooltip"
>
{{
header
}}
</label>
<div
id=
"data-window"
>
<div
class=
"data-entry-container"
:data-state=
"item.state"
:data-state=
"item.
etl_
state"
v-for=
"item in items"
>
<div
class=
"data-entry-header"
:data-state=
"item.state"
>
<span
class=
"cross"
v-if=
"item.state === 'FAILURE'"
>
×
</span>
:data-state=
"item.
etl_
state"
>
<span
class=
"cross"
v-if=
"item.
etl_
state === 'FAILURE'"
>
×
</span>
<input
type=
"checkbox"
:id=
"'data-check-' + item.
da
ta_id"
:value=
"item.
da
ta_id"
:id=
"'data-check-' + item.ta
sk
_id"
:value=
"item.ta
sk
_id"
v-model=
"selectedIDs"
v-if=
"item.state === 'SUCCESS'"
/>
<label
:for=
"'data-check-' + item.
da
ta_id"
>
v-if=
"item.
etl_
state === 'SUCCESS'"
/>
<label
:for=
"'data-check-' + item.ta
sk
_id"
>
{{
item
.
label
}}
</label>
<span
class=
"options"
@
click=
"toggleDataEntryBody(item.
da
ta_id)"
>
☰
</span>
<span
class=
"options"
@
click=
"toggleDataEntryBody(item.ta
sk
_id)"
>
☰
</span>
</div>
<div
class=
"data-entry-body"
:data-state=
"item.state"
:data-id=
"item.
da
ta_id"
>
<div
class=
"data-entry-body"
:data-state=
"item.
etl_
state"
:data-id=
"item.ta
sk
_id"
>
<div
class=
"action-btns"
>
<button
class=
"reload-btn"
@
click=
"reloadData(item.
da
ta_id)"
>
↻
</button>
<button
class=
"delete-btn"
@
click=
"deleteData(item.
da
ta_id)"
>
×
</button><br/>
<button
class=
"reload-btn"
@
click=
"reloadData(item.ta
sk
_id)"
>
↻
</button>
<button
class=
"delete-btn"
@
click=
"deleteData(item.ta
sk
_id)"
>
×
</button><br/>
</div>
{{
item
.
message
}}
{{
item
.
etl_
message
}}
</div>
</div>
</div>
...
...
@@ -68,15 +68,15 @@
}
},
methods
:
{
toggleDataEntryBody
(
da
taID
)
{
const
$body
=
$
(
`.data-entry-body[data-id="
${
da
taID
}
"]`
)
toggleDataEntryBody
(
ta
sk
ID
)
{
const
$body
=
$
(
`.data-entry-body[data-id="
${
ta
sk
ID
}
"]`
)
$body
.
slideToggle
(
500
)
},
reloadData
(
da
taID
)
{
store
.
getters
.
requestManager
.
reloadData
({
da
taID
})
reloadData
(
ta
sk
ID
)
{
store
.
getters
.
requestManager
.
reloadData
({
ta
sk
ID
})
},
deleteData
(
da
taID
)
{
store
.
getters
.
requestManager
.
deleteData
({
da
taID
})
deleteData
(
ta
sk
ID
)
{
store
.
getters
.
requestManager
.
deleteData
({
ta
sk
ID
})
}
}
}
...
...
src/components/charts/CorrelationAnalysis.vue
View file @
c8025339
...
...
@@ -432,7 +432,7 @@
args
.
ids
=
[]
}
// function made available via requestHandling mixin
this
.
runAnalysis
({
job
_name
:
'
compute-correlation
'
,
args
:
args
})
this
.
runAnalysis
({
task
_name
:
'
compute-correlation
'
,
args
:
args
})
.
then
(
response
=>
{
const
results
=
JSON
.
parse
(
response
)
results
.
data
=
JSON
.
parse
(
results
.
data
)
...
...
src/components/mixins/request-handling.js
View file @
c8025339
'
use strict
'
import
store
from
'
../../store/store
'
export
default
{
methods
:
{
async
runAnalysis
({
job
_name
,
args
})
{
async
runAnalysis
({
task
_name
,
args
})
{
function
timeout
(
ms
)
{
return
new
Promise
(
resolve
=>
setTimeout
(
resolve
,
ms
))
}
const
rv1
=
await
store
.
getters
.
requestManager
.
createAnalysis
({
job
_name
,
args
})
const
job
ID
=
rv1
.
data
.
job
_id
const
rv1
=
await
store
.
getters
.
requestManager
.
createAnalysis
({
task
_name
,
args
})
const
task
ID
=
rv1
.
data
.
task
_id
let
counter
=
0
while
(
counter
<
1000
)
{
await
timeout
(
++
counter
*
200
)
const
rv2
=
await
store
.
getters
.
requestManager
.
getAnalysisStatus
({
job
ID
})
const
job
Info
=
rv2
.
data
if
(
job
Info
.
state
===
'
SUCCESS
'
)
{
return
job
Info
.
result
}
else
if
(
job
Info
.
state
===
'
FAILURE
'
)
{
throw
new
Error
(
job
Info
.
result
)
}
else
if
(
job
Info
.
state
===
'
PENDING
'
)
{
const
rv2
=
await
store
.
getters
.
requestManager
.
getAnalysisStatus
({
task
ID
})
const
task
Info
=
rv2
.
data
if
(
task
Info
.
state
===
'
SUCCESS
'
)
{
return
task
Info
.
result
}
else
if
(
task
Info
.
state
===
'
FAILURE
'
)
{
throw
new
Error
(
task
Info
.
result
)
}
else
if
(
task
Info
.
state
===
'
PENDING
'
)
{
}
else
{
throw
new
Error
(
`Analysis
Job
has unknown state:
${
job
Info
.
state
}
`
)
throw
new
Error
(
`Analysis
Task
has unknown state:
${
task
Info
.
state
}
`
)
}
}
}
...
...
src/components/mixins/v-svgtooltip.js
View file @
c8025339
'
use strict
'
import
*
as
d3
from
'
d3
'
import
d3Tip
from
'
d3-tip
'
;
d3
.
tip
=
d3Tip
...
...
src/services/chart-manager.js
View file @
c8025339
'
use strict
'
import
Vue
from
'
vue
'
import
CorrelationAnalysis
from
'
../components/charts/CorrelationAnalysis.vue
'
...
...
src/services/request-manager.js
View file @
c8025339
...
...
@@ -15,7 +15,7 @@ export default class {
}
createData
({
descriptors
})
{
return
this
.
_axios
.
post
(
'
/data
'
,
{
this
.
_axios
.
post
(
'
/data
'
,
{
descriptors
,
auth
:
this
.
_getAuth
(),
handler
:
this
.
_handler
,
...
...
@@ -23,42 +23,34 @@ export default class {
})
}
reloadData
({
da
taID
})
{
const
dataItem
=
store
.
getters
.
data
.
find
(
d
=>
d
.
da
ta_id
===
da
taID
)
reloadData
({
ta
sk
ID
})
{
const
dataItem
=
store
.
getters
.
data
.
find
(
d
=>
d
.
ta
sk
_id
===
ta
sk
ID
)
const
descriptors
=
[
dataItem
.
descriptor
]
this
.
deleteData
({
taskID
})
this
.
createData
({
descriptors
})
}
getDataStatusByParams
({
descriptor
})
{
const
params
=
JSON
.
stringify
({
server
:
this
.
_thisBaseURL
,
descriptor
})
return
this
.
_axios
.
get
(
`/data/
${
params
}
`
)
}
getDataStatusByID
({
dataID
})
{
return
this
.
_axios
.
get
(
`/data/
${
dataID
}
`
)
}
getAllDataStatus
()
{
getAllDataStates
()
{
return
this
.
_axios
.
get
(
'
/data
'
)
}
deleteData
({
da
taID
})
{
return
this
.
_axios
.
delete
(
`/data/
${
da
taID
}
`
)
deleteData
({
ta
sk
ID
})
{
return
this
.
_axios
.
delete
(
`/data/
${
ta
sk
ID
}
`
)
}
deleteAllData
()
{
return
this
.
_axios
.
delete
(
'
/data
'
)
}
createAnalysis
({
job
_name
,
args
})
{
return
this
.
_axios
.
post
(
'
/analytics
'
,
{
job
_name
,
args
})
createAnalysis
({
task
_name
,
args
})
{
return
this
.
_axios
.
post
(
'
/analytics
'
,
{
task
_name
,
args
})
}
getAnalysisStatus
({
job
ID
})
{
return
this
.
_axios
.
get
(
`/analytics/
${
job
ID
}
`
)
getAnalysisStatus
({
task
ID
})
{
return
this
.
_axios
.
get
(
`/analytics/
${
task
ID
}
`
)
}
cancelAnalysis
({
job
ID
})
{
return
this
.
_axios
.
delete
(
`/analytics/
${
job
ID
}
`
)
cancelAnalysis
({
task
ID
})
{
return
this
.
_axios
.
delete
(
`/analytics/
${
task
ID
}
`
)
}
}
src/store/actions.js
View file @
c8025339
...
...
@@ -8,7 +8,7 @@ export default {
context
.
commit
(
types
.
SET_SUBSETS
,
subsets
)
},
updateData
:
context
=>
{
context
.
getters
.
requestManager
.
getAllDataStat
u
s
().
then
(
response
=>
{
context
.
getters
.
requestManager
.
getAllDataStat
e
s
().
then
(
response
=>
{
context
.
commit
(
types
.
SET_DATA
,
response
.
data
.
data_states
)
}).
catch
(
error
=>
{
console
.
error
(
error
)
// TODO: Notify user about this
...
...
test/charts/test-chart.html
View file @
c8025339
...
...
@@ -14,12 +14,13 @@
<script>
const
fjs
=
fractal
.
init
({
handler
:
'
ada
'
,
thisBaseURL
:
'
http://
10.79.2.192:8080
'
,
thisBaseURL
:
'
http
s
://
ada.parkinson.lu
'
,
fractalisBaseURL
:
'
http://127.0.0.1:5000
'
,
getAuth
()
{
return
credentials1
}
})
fjs
.
clearCache
()
fjs
.
loadData
([
{
data_type
:
'
Enum
'
,
...
...
test/data-box-test.js
View file @
c8025339
...
...
@@ -36,8 +36,8 @@ describe('DataBox', () => {
it
(
'
checkboxes are linked to data
'
,
()
=>
{
store
.
state
.
data
=
[
{
data_type
:
'
numeric
'
,
label
:
''
,
da
ta_id
:
'
A
'
},
{
data_type
:
'
numeric
'
,
label
:
''
,
da
ta_id
:
''
}
{
data_type
:
'
numeric
'
,
label
:
''
,
ta
sk
_id
:
'
A
'
},
{
data_type
:
'
numeric
'
,
label
:
''
,
ta
sk
_id
:
''
}
]
const
Component
=
Vue
.
extend
(
DataBox
)
const
propsData
=
{
dataType
:
'
numeric
'
,
header
:
''
}
...
...
test/request-handling-test.js
View file @
c8025339
'
use strict
'
import
requestHandling
from
'
../src/components/mixins/request-handling
'
import
RequestManager
from
'
../src/services/request-manager
'
import
store
from
'
../src/store/store
'
...
...
@@ -18,9 +16,9 @@ describe('runAnalysis method', () => {
expect
(
rv
instanceof
Promise
).
toBe
(
true
)
})
it
(
'
fails if unknown
job
state
'
,
done
=>
{
it
(
'
fails if unknown
task
state
'
,
done
=>
{
spyOn
(
store
.
getters
.
requestManager
,
'
createAnalysis
'
)
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
job
_id
:
123
}}))
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
task
_id
:
123
}}))
spyOn
(
store
.
getters
.
requestManager
,
'
getAnalysisStatus
'
)
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
state
:
'
FOO
'
,
result
:
''
}}))
runAnalysis
({
name
:
''
,
args
:
{}})
...
...
@@ -28,9 +26,9 @@ describe('runAnalysis method', () => {
.
catch
(
done
)
})
it
(
'
resolves if
job
state is successful
'
,
done
=>
{
it
(
'
resolves if
task
state is successful
'
,
done
=>
{
spyOn
(
store
.
getters
.
requestManager
,
'
createAnalysis
'
)
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
job
_id
:
123
}}))
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
task
_id
:
123
}}))
spyOn
(
store
.
getters
.
requestManager
,
'
getAnalysisStatus
'
)
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
state
:
'
SUCCESS
'
,
result
:
123
}}))
runAnalysis
({
name
:
''
,
args
:
{}})
...
...
@@ -41,9 +39,9 @@ describe('runAnalysis method', () => {
.
catch
(
done
.
fail
)
})
it
(
'
rejects if
job
state is unsuccessful
'
,
done
=>
{
it
(
'
rejects if
task
state is unsuccessful
'
,
done
=>
{
spyOn
(
store
.
getters
.
requestManager
,
'
createAnalysis
'
)
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
job
_id
:
123
}}))
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
task
_id
:
123
}}))
spyOn
(
store
.
getters
.
requestManager
,
'
getAnalysisStatus
'
)
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
state
:
'
FAILURE
'
,
result
:
''
}}))
runAnalysis
({
name
:
''
,
args
:
{}})
...
...
@@ -51,9 +49,9 @@ describe('runAnalysis method', () => {
.
catch
(
done
)
})
it
(
'
does wait for
job
state to switch from PENDING to final state
'
,
done
=>
{
it
(
'
does wait for
task
state to switch from PENDING to final state
'
,
done
=>
{
spyOn
(
store
.
getters
.
requestManager
,
'
createAnalysis
'
)
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
job
_id
:
123
}}))
.
and
.
returnValue
(
Promise
.
resolve
({
data
:
{
task
_id
:
123
}}))
spyOn
(
store
.
getters
.
requestManager
,
'
getAnalysisStatus
'
)
.
and
.
returnValues
(
Promise
.
resolve
({
data
:
{
state
:
'
PENDING
'
,
result
:
''
}}),
...
...
test/store-test.js
View file @
c8025339
'
use strict
'
import
store
from
'
../src/store/store
'
import
RequestManager
from
'
../src/services/request-manager
'
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment