Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
adc2019-system
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
adc2019
adc2019-system
Commits
a4d7fc10
Commit
a4d7fc10
authored
Aug 26, 2019
by
Kento HASEGAWA
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update the request view and its backend process
parent
4b5c132c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
96 additions
and
65 deletions
+96
-65
host.py
roles/host.py
+88
-54
solver.py
roles/solver.py
+3
-0
adc2019.js
static/js/adc2019.js
+2
-1
part_request_status.html
templates/part_request_status.html
+3
-10
No files found.
roles/host.py
View file @
a4d7fc10
...
@@ -54,16 +54,24 @@ class Host(object):
...
@@ -54,16 +54,24 @@ class Host(object):
if
problem
is
None
:
if
problem
is
None
:
return
{
'status'
:
'key error'
}
return
{
'status'
:
'key error'
}
else
:
else
:
request
=
Request
(
self
.
worker_manager
,
problem
.
get_dict
(),
solvers
=
solvers
)
# request = Request(self.worker_manager, problem.get_dict(), solvers=solvers)
request_id
=
request
.
get_id
()
if
solvers
is
None
:
self
.
request
[
request_id
]
=
request
_solvers
=
self
.
worker_manager
.
get_workers
()
self
.
problem_to_request
[
problem_key
]
.
append
(
request_id
)
else
:
_solvers
=
dict
()
for
k
,
v
in
self
.
worker_manager
.
get_workers
()
.
items
():
if
k
in
solvers
:
_solvers
[
k
]
=
v
for
_
,
v
in
_solvers
.
items
():
request
=
Request
(
self
.
worker_manager
,
problem
.
get_dict
(),
v
)
request
.
broadcast
()
request_id
=
request
.
get_id
()
self
.
request
[
request_id
]
=
request
self
.
problem_to_request
[
problem_key
]
.
append
(
request_id
)
request
.
broadcast
()
return
{
return
{
'status'
:
'processed'
,
'status'
:
'processed'
,
'request_id'
:
request_id
,
'timeout'
:
request
.
timeout
}
}
def
get_problems
(
self
):
def
get_problems
(
self
):
...
@@ -81,6 +89,10 @@ class Host(object):
...
@@ -81,6 +89,10 @@ class Host(object):
if
solution
[
'status'
]
!=
'done'
:
if
solution
[
'status'
]
!=
'done'
:
return
{
'status'
:
'ignored'
}
return
{
'status'
:
'ignored'
}
problem_key
=
solution
[
'problem'
]
problem_key
=
solution
[
'problem'
]
request_id
=
solution
[
'request_id'
]
if
request_id
in
self
.
request
:
self
.
request
[
request_id
]
.
store_response
(
solution
)
if
problem_key
in
self
.
problems
:
if
problem_key
in
self
.
problems
:
res
=
self
.
problems
[
problem_key
]
.
put_partial_solution
(
solution
)
res
=
self
.
problems
[
problem_key
]
.
put_partial_solution
(
solution
)
...
@@ -308,6 +320,11 @@ class Worker(object):
...
@@ -308,6 +320,11 @@ class Worker(object):
self
.
name
=
params
[
'name'
]
self
.
name
=
params
[
'name'
]
self
.
host
=
params
[
'host'
]
self
.
host
=
params
[
'host'
]
self
.
role
=
params
[
'role'
]
self
.
role
=
params
[
'role'
]
if
not
'partial_mode'
in
params
:
self
.
partial_mode
=
False
else
:
self
.
partial_mode
=
params
[
'partial_mode'
]
self
.
params
=
params
self
.
params
=
params
self
.
status
=
'Ready'
self
.
status
=
'Ready'
...
@@ -339,23 +356,33 @@ class Worker(object):
...
@@ -339,23 +356,33 @@ class Worker(object):
class
Request
(
object
):
class
Request
(
object
):
def
__init__
(
self
,
worker_manager
,
data
,
timeout
=
10000
,
solvers
=
None
):
def
__init__
(
self
,
worker_manager
,
data
,
worker
,
timeout
=
10000
):
self
.
worker_manager
=
worker_manager
#
self.worker_manager = worker_manager
self
.
data
=
data
self
.
data
=
data
self
.
timeout
=
timeout
self
.
timeout
=
timeout
self
.
request_id
=
time
.
time
()
self
.
request_id
=
time
.
time
()
self
.
broadcast_time
=
None
self
.
request_time
=
None
self
.
done_time
=
None
if
solvers
is
None
:
# if solvers is None:
self
.
solvers
=
list
(
self
.
worker_manager
.
get_workers
()
.
keys
())
# self.solvers = list(self.worker_manager.get_workers().keys())
else
:
# else:
self
.
solvers
=
solvers
# self.solvers = solvers
self
.
solver
=
worker
self
.
response
=
dict
()
self
.
response
=
dict
()
for
w
in
self
.
solvers
:
# for w in self.solvers:
self
.
response
[
w
]
=
list
()
# self.response[w] = list()
self
.
response
=
list
()
if
self
.
solver
.
partial_mode
:
self
.
part_nums
=
len
(
data
[
'group_problems'
])
self
.
solved
=
[
0
for
v
in
range
(
self
.
part_nums
+
1
)]
else
:
self
.
part_nums
=
1
self
.
solved
=
[
0
]
@
property
@
property
def
request_data
(
self
):
def
request_data
(
self
):
...
@@ -371,55 +398,62 @@ class Request(object):
...
@@ -371,55 +398,62 @@ class Request(object):
return
self
.
request_data
return
self
.
request_data
def
store_response
(
self
,
data
):
def
store_response
(
self
,
data
):
worker
=
data
[
'worker'
]
#
worker = data['worker']
self
.
response
[
worker
]
.
append
(
data
)
#
self.response[worker].append(data)
# self.response[worker] = data
# self.response[worker] = data
self
.
response
.
append
(
data
)
print
(
data
)
if
'part_id'
in
data
:
idx
=
data
[
'part_id'
]
print
(
idx
)
if
data
[
'status'
]
==
'done'
:
self
.
solved
[
idx
]
+=
1
else
:
self
.
solved
[
-
1
]
=
1
self
.
done_time
=
time
.
time
()
def
get_status
(
self
):
def
get_status
(
self
):
worker_count
=
0
response_count
=
0
for
v
in
self
.
solvers
:
worker_count
+=
1
if
v
in
self
.
response
:
response_count
+=
1
status
=
''
status
=
''
if
worker_count
==
response_count
:
status
=
'done'
if
self
.
solved
[
-
1
]
==
1
:
# elif time.time() - self.broadcast_time > self.timeout:
elapsed_time
=
self
.
done_time
-
self
.
request_time
# status = 'timeout'
else
:
elapsed_time
=
time
.
time
()
-
self
.
broadcast_time
et_minutes
=
int
(
elapsed_time
//
60
)
et_minutes
=
int
(
elapsed_time
//
60
)
et_seconds
=
int
(
elapsed_time
%
60
)
et_seconds
=
int
(
elapsed_time
%
60
)
# status = 'processing'
status
=
f
'done ({self.solved[-1]}) [{et_minutes}:{et_seconds:02}]'
status
=
f
'{et_minutes}:{et_seconds:02}'
elif
self
.
solved
[
-
1
]
==
-
1
:
status
=
'failed'
if
self
.
broadcast_time
is
None
:
progress
=
0
,
else
:
else
:
progress_problem
=
response_count
/
worker_count
*
100
if
self
.
solver
.
status
==
'Not connected'
:
progress_time
=
(
time
.
time
()
-
self
.
broadcast_time
)
/
self
.
timeout
*
100
status
=
'Not connected'
progress
=
min
(
100
,
max
(
progress_problem
,
progress_time
))
worker_status
=
dict
()
for
v
in
self
.
solvers
:
if
v
in
self
.
response
and
len
(
self
.
response
[
v
])
>
0
:
worker_status
[
v
]
=
self
.
response
[
v
][
0
][
'status'
]
else
:
else
:
if
self
.
worker_manager
.
workers
[
v
]
.
status
==
'Not connected'
:
if
len
(
self
.
solved
)
==
1
:
worker_status
[
v
]
=
'Not connected'
status_mes
=
'Waiting for response'
else
:
elif
len
(
self
.
solved
)
>
1
:
worker_status
[
v
]
=
'Waiting for response'
counter
=
sum
([
v
>
0
for
v
in
self
.
solved
])
status_mes
=
f
'{counter}/{len(self.solved)}'
elapsed_time
=
time
.
time
()
-
self
.
request_time
et_minutes
=
int
(
elapsed_time
//
60
)
et_seconds
=
int
(
elapsed_time
%
60
)
elapsed_time_str
=
f
'{et_minutes}:{et_seconds:02}'
status
=
f
'{status_mes} [{elapsed_time_str}]'
return
{
return
{
'status'
:
status
,
'status'
:
status
,
'worker
s'
:
worker_count
,
'worker
'
:
self
.
solver
.
address
,
'solutions'
:
response_count
,
#
'solutions': response_count,
'progress'
:
progress
,
#
'progress': progress,
'worker_status'
:
worker_status
#
'worker_status': worker_status
}
}
def
broadcast
(
self
):
def
broadcast
(
self
):
self
.
worker_manager
.
broadcast
(
'solve'
,
self
.
request_data
,
solvers
=
self
.
solvers
)
self
.
broadcast_time
=
time
.
time
()
def
_sender
():
self
.
solver
.
post
(
'solve'
,
self
.
request_data
)
_th
=
threading
.
Thread
(
name
=
f
'request_sender_{self.solver.address}'
,
target
=
_sender
,
daemon
=
True
)
_th
.
start
()
self
.
request_time
=
time
.
time
()
roles/solver.py
View file @
a4d7fc10
...
@@ -82,6 +82,9 @@ class Solver(object):
...
@@ -82,6 +82,9 @@ class Solver(object):
solution
[
'block_map'
]
=
gblock_map
solution
[
'block_map'
]
=
gblock_map
self
.
submit_solution
(
data
,
solution
)
self
.
submit_solution
(
data
,
solution
)
if
self
.
solver
.
stop_flag
:
break
else
:
else
:
start_time
=
time
.
time
()
start_time
=
time
.
time
()
solution
=
self
.
solver
.
solve
(
params
)
solution
=
self
.
solver
.
solve
(
params
)
...
...
static/js/adc2019.js
View file @
a4d7fc10
...
@@ -96,7 +96,8 @@ class StatusView {
...
@@ -96,7 +96,8 @@ class StatusView {
}),
}),
contentType
:
'application/json'
contentType
:
'application/json'
}).
done
((
d
)
=>
{
}).
done
((
d
)
=>
{
var
request_id
=
d
[
'request_id'
];
console
.
log
(
d
);
// var request_id = d['request_id'];
// var timeout = d['timeout'];
// var timeout = d['timeout'];
// _this.container.find('#solver-processing-modal').modal({
// _this.container.find('#solver-processing-modal').modal({
...
...
templates/part_request_status.html
View file @
a4d7fc10
<div>
<div>
{% for r in status %}
<p>
処理結果:
<span
id=
'request-status-value'
>
{{r.status}}
</span></p>
<table
class=
"table table-bordered table-sm"
>
<table
class=
"table table-bordered table-sm"
>
<!-- <tr>
<th>Worker (Solver)</th>
<th>Status</th>
</tr> -->
<tbody>
<tbody>
{% for
k, v in r['worker_status'].items()
%}
{% for
r in status
%}
<tr>
<tr>
<td>
{{
k
}}
</td>
<td>
{{
r['worker']
}}
</td>
<td>
{{
v
}}
</td>
<td>
{{
r['status']
}}
</td>
</tr>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</tbody>
</table>
</table>
{% endfor %}
</div>
</div>
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