aboutsummaryrefslogtreecommitdiff
path: root/player/endpoints.f90
blob: 8c655d497bd732892212e0a73ac5137bb804e05b (plain)
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