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