111 instance.uptime (detail) fix
This commit is contained in:
+30
-22
@@ -37,27 +37,24 @@
|
||||
<m:field>e.updater_id</m:field>
|
||||
<m:field>u.login as updater_login</m:field>
|
||||
<m:field>u.shortname as updater_shortname</m:field>
|
||||
<m:field>(select cast(st.instance_data->>'params' as json)->>'resourceRealm' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as resourceRealm</m:field>
|
||||
|
||||
<m:field formatter=#request.castToBool#>(select coalesce((io.dt_start IS NOT NULL AND io.dt_finish IS NULL AND io.submit_result='201'),false) from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as operation_is_in_progress</m:field>
|
||||
<m:field formatter=#request.castToBool#>(select coalesce((io.dt_start IS NULL AND io.submit_result='201'),false) from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as operation_is_pending</m:field>
|
||||
|
||||
<m:field>
|
||||
(case
|
||||
when
|
||||
not exists (select * from instance_state st where st.instance_uid=e.instance_uid) then 'not created'
|
||||
when
|
||||
(select st.instance_data->>'isDeleted' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) = 'true' then 'deleted'
|
||||
when
|
||||
(select st.instance_data->>'isSuspended' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) = 'true' then 'suspended'
|
||||
when
|
||||
(select coalesce(st.instance_data->>'isDeleted','false') from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) = 'false' AND (select coalesce(st.instance_data->>'isSuspended','false') from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) = 'false' then 'running'
|
||||
when
|
||||
not exists (select * from instance_operation o where o.instance_uid=e.instance_uid) then 'not configured'
|
||||
|
||||
else null end
|
||||
) as explained_status
|
||||
</m:field>
|
||||
<m:field>cast(st.instance_data->>'params' as json)->>'resourceRealm' as resource_realm</m:field>
|
||||
<m:field formatter=#request.castToBool#>coalesce((io.dt_start IS NOT NULL AND io.dt_finish IS NULL AND io.submit_result='201'),false) as operation_is_in_progress</m:field>
|
||||
<m:field formatter=#request.castToBool#>coalesce((io.dt_start IS NULL AND io.submit_result='201'),false) as operation_is_pending</m:field>
|
||||
<m:field>case
|
||||
when io.operation IN ('delete', 'suspend') AND io.is_successful then 0 /*null*/
|
||||
when io.is_successful then extract('epoch' from CURRENT_TIMESTAMP - coalesce(io.dt_finish,CURRENT_TIMESTAMP))
|
||||
else 0 end
|
||||
as uptime</m:field>
|
||||
<m:field>(case
|
||||
when st.instance_uid IS NULL then 'not created'
|
||||
when st.is_deleted = 'true' then 'deleted'
|
||||
when st.is_suspended = 'true' then 'suspended'
|
||||
/*when coalesce(st.is_deleted,'false') = 'false' AND coalesce(st.is_suspended, 'false') = 'false' then 'running'*/
|
||||
when coalesce(st.is_deleted,'false') = 'false' AND coalesce(st.is_suspended, 'false') = 'false' then 'running'
|
||||
when io.instance_uid IS NULL then 'not configured'
|
||||
else null end
|
||||
) as explained_status</m:field>
|
||||
<!--- <m:field>st.version</m:field> --->
|
||||
</m:field_set>
|
||||
from instance e
|
||||
left outer join specification_item i on (e.specification_item_id=i.specification_item_id)
|
||||
@@ -66,6 +63,17 @@
|
||||
left outer join contragent k on (d.contragent_id=k.contragent_id)
|
||||
left outer join svc v on (e.service_id=v.svc_id)
|
||||
left outer join usr u on (e.updater_id=u.usr_id)
|
||||
left outer join (select ist.instance_state_uid, ist.instance_uid, ist.version, ist.dt_state, ist.is_test
|
||||
,(ist.instance_data->>'isSuspended') as is_suspended
|
||||
,(ist.instance_data->>'isDeleted') as is_deleted
|
||||
,ist.instance_data
|
||||
from instance_state ist join (select instance_uid, max(version) as version from instance_state group by 1) lastv
|
||||
on (ist.instance_uid=lastv.instance_uid AND ist.version=lastv.version) ) st
|
||||
on (e.instance_uid=st.instance_uid)
|
||||
left outer join (select o.instance_operation_uid, o.instance_uid, o.operation, o.dt_submit, o.submit_result, o.dt_start, o.dt_finish, o.is_successful
|
||||
from instance_operation o join (select instance_uid, max(dt_submit) as dt_submit from instance_operation group by 1) lastv
|
||||
on (o.instance_uid=lastv.instance_uid AND o.dt_submit=lastv.dt_submit) ) io
|
||||
on (e.instance_uid=io.instance_uid)
|
||||
where e.instance_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceUid#" null=#!isValid('guid',arguments.instanceUid)#/>
|
||||
AND s.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.specificationId#/><!--- access protection --->
|
||||
</cfquery> <!--- *** правильнее при попытке доступа к чужому инстансу (НСД) выбрасывать 403, а тут будет 404, но так тоже делают, например, в gitea --->
|
||||
@@ -257,7 +265,7 @@
|
||||
<cfset "out.instance" = this.helper.appendRecord(
|
||||
structNew("linked"), "", local.titleMap, local.qInstance, this.helper.snake2camel
|
||||
)/>
|
||||
<cfset "out.instance.uptime"=(local.qOperation.is_successful GT 0) ? local.qOperation.seconds_passed : 0/>
|
||||
<!--- <cfset "out.instance.uptime"=(local.qOperation.is_successful GT 0) ? local.qOperation.seconds_passed : 0/> --->
|
||||
<cfset "out.instance.isCreated"=local.isCreated/>
|
||||
<cfset "out.instance.isDeleted"=qCurrentState.is_deleted GT 0/>
|
||||
<cfset "out.instance.vaultData"=local.vaultData/>
|
||||
|
||||
Reference in New Issue
Block a user