1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
module player_endpoints
implicit none
character(*), parameter::LOCATION_CHECK_IN = "/api/player/{name}/checkin.json"
character(*), parameter::LOCATION_STATUS = "/api/player/{name}/job/{jobid}/task/{step}"
character(*), parameter::LOCATION_JOB_COMPLETE = "/api/player/{name}/job/{jobid}/complete"
character(*), parameter::LOCATION_JOB_FAILED = "/api/player/{name}/job/{jobid}/failed"
character(*), parameter::LOCATION_INSTRUCTIONS = "/api/instruction/{name}"
integer, parameter::STATUS_STARTING=1
integer, parameter::STATUS_COMPLETED=2
integer, parameter::STATUS_FAILED=3
integer, parameter::STATUS_IN_PROGRESS=4
character(len=10), dimension(4)::status_text = (/ "starting ", &
"complete ", &
"failed ", &
"inprogress" /)
contains
subroutine base_url(server, location, post, res)
implicit none
character(*), intent(in)::server
character(*), intent(in)::location
logical, intent(in)::post
character(*), intent(out)::res
if(post) then
res = "titan://"//trim(server)//trim(location)
else
res = "gemini://"//trim(server)//trim(location)
end if
end subroutine base_url
subroutine get_check_in_url(res)
use config
use utilities, only: replace_field
implicit none
character(*), intent(out)::res
call base_url(captain, LOCATION_CHECK_IN, .false., res)
call replace_field(res, "name", identity)
end subroutine get_check_in_url
subroutine get_status_url(job, step, url, posting, status)
use config
use utilities, only: replace_field
implicit none
integer, intent(in)::job
integer, intent(in)::step
logical, intent(in), optional::posting
integer, intent(in), optional::status
character(*), intent(out)::url
character(32)::int_text
if(present(posting)) then
call base_url(captain, LOCATION_STATUS, posting, url)
else
call base_url(captain, LOCATION_STATUS, .false., url)
end if
call replace_field(url, "name", identity)
call replace_field(url, "jobid", job)
call replace_field(url, "step", step)
if(present(status)) then
url = trim(url)//"?"//trim(status_text(status))
end if
end subroutine get_status_url
subroutine get_job_report_url(job, success, res)
use config
use utilities, only: replace_field
implicit none
integer, intent(in)::job
logical, intent(in)::success
character(*), intent(out)::res
if(success) then
call base_url(captain, LOCATION_JOB_COMPLETE, .false., res)
else
call base_url(captain, LOCATION_JOB_FAILED, .false., res)
end if
call replace_field(res, "name", identity)
call replace_field(res, "jobid", job)
end subroutine get_job_report_url
subroutine get_instruction_url(instruction, url)
use config
use utilities, only: replace_field
implicit none
character(*), intent(in)::instruction
character(*), intent(out)::url
call base_url(captain, LOCATION_INSTRUCTIONS, .false., url)
call replace_field(url, "name", instruction)
end subroutine get_instruction_url
end module player_endpoints
|