aboutsummaryrefslogtreecommitdiff
path: root/captain/external.f90
diff options
context:
space:
mode:
authorJeffrey Armstrong <jeff@approximatrix.com>2021-04-01 16:49:20 -0400
committerJeffrey Armstrong <jeff@approximatrix.com>2021-04-01 16:49:20 -0400
commit3e58313bde5e3e572d84fe014d9902dfb04712c3 (patch)
tree336884dbbfc441c437bda3f6b5121b4b3d2ef225 /captain/external.f90
parentb125906018d0d3d09baeebb096db56ca052902eb (diff)
downloadlevitating-3e58313bde5e3e572d84fe014d9902dfb04712c3.tar.gz
levitating-3e58313bde5e3e572d84fe014d9902dfb04712c3.zip
Jobs are now inserted into the database when launched. Job listings work.
Diffstat (limited to 'captain/external.f90')
-rw-r--r--captain/external.f9085
1 files changed, 78 insertions, 7 deletions
diff --git a/captain/external.f90 b/captain/external.f90
index d572a7e..a86bd52 100644
--- a/captain/external.f90
+++ b/captain/external.f90
@@ -28,6 +28,10 @@ contains
! Sleeping 0x1f4a4
res = char(240)//char(159)//char(146)//char(164)
+ case(JOB_STATUS_PENDING)
+ ! Envelope 0x2709
+ res = char(226)//char(156)//char(137)//" "
+
end select
end function get_status_utf8
@@ -61,7 +65,7 @@ contains
last = min(size(jobs), stopindex)
end if
- if(first < last .and. first < size(jobs)) then
+ if(first <= last .and. first <= size(jobs)) then
nsize = (last-first+1)*(2*PLAYER_NAME_LENGTH + 64)
allocate(character(len=nsize) :: res)
res = " "
@@ -71,7 +75,7 @@ contains
call get_player_name(jobs(i)%player, player)
write(int_text, '(I8)') jobs(i)%id
- link = "=> jobs/"//trim(adjustl(int_text))//".gmi"// &
+ link = "=> jobs/"//trim(adjustl(int_text))//".gmi "// &
trim(get_status_utf8(jobs(i)%status))//" Job "// &
trim(adjustl(int_text))//" - "//trim(instruction)
@@ -96,17 +100,17 @@ contains
function generate_jobs_gemini(req) result(res)
use captain_db
use server_response
+ use logging
implicit none
type(request)::req
character(len=:), pointer::res
type(job), dimension(:), pointer::jobs
- integer::n, i, nsize
+ integer::n, nsize
integer::i_start_jobs, ierr
character(len=:), pointer::linklist
- character(16)::int_text, int_text2
-
+ character(64)::dbgstr
n = get_jobs_count()
if(n == 0) then
@@ -134,13 +138,80 @@ contains
res = "## Jobs "
+ write(dbgstr, '(I3,1X,I3)') i_start_jobs, min(i_start_jobs+14, n)
+ call write_log("Jobs between "//trim(dbgstr))
+
linklist => render_jobs_links(jobs, i_start_jobs, min(i_start_jobs+14, n))
- res = res//trim(linklist)
+ res = trim(res)//trim(linklist)
+ call write_log(linklist)
deallocate(linklist)
end if
end function generate_jobs_gemini
+
+ function generate_one_job_gemini(req) result(res)
+ use captain_db
+ use server_response
+ implicit none
+
+ type(request), intent(in)::req
+ character(len=:), pointer::res
+
+ character(4)::status
+ integer::i, j, job_id
+ type(job)::one_job
+
+ character(PLAYER_NAME_LENGTH)::player
+ character(1)::nl = new_line(' ')
+
+ type(task), dimension(:), pointer::tasks
+ character(16)::task_text, job_text
+
+ res => null()
+
+ i = index(req%location, "/", back=.true.)
+ j = index(req%location, ".", back=.true.)
+
+ job_text = req%location(i+1:j-1)
+ read(job_text, *) job_id
+ one_job = get_job(job_id)
+
+ if(one_job%id >= 0) then
+ allocate(character(len=1024) :: res)
+
+ status = get_status_utf8(one_job%status)
+ res = "## Job "//job_text//" - "//status
+
+ call get_player_name(one_job%player, player)
+ res = trim(res)//nl//nl//"Running on "//trim(player)//nl//"Last update at: "//one_job%time
+
+ res = trim(res)//nl//nl//"### Task Results"
+
+ tasks => get_job_tasks(job_id)
+ if(associated(tasks)) then
+ do i = 1, size(tasks)
+ status = get_status_utf8(tasks(i)%status)
+ write(task_text, '(I8)') tasks(i)%number
+
+ res = trim(res)//nl//"=> /results/"//trim(job_text)//"-"//trim(adjustl(task_text))//".txt "// &
+ trim(status)//"Task "//trim(adjustl(task_text))
+
+ end do
+ deallocate(tasks)
+ else
+ res = trim(res)//nl//nl//"None reported yet"
+ end if
+
+ else
+
+ allocate(character(len=64) :: res)
+ write(res, '(A20, 1X, I5)') "No record of:", job_id
+
+ end if
+
+
+ end function generate_one_job_gemini
function generate_players_gemini() result(res)
use captain_db
@@ -203,7 +274,7 @@ contains
character(len=PLAYER_NAME_LENGTH), dimension(:), pointer::all_players
integer::i, j, n_jobs, n_players, nsize
- character(len=:), pointer::job_link_text, player_link_text
+ character(len=:), pointer::job_link_text
character(1)::nl = new_line(' ')
character(PLAYER_NAME_LENGTH)::player_name
character(4)::player_status