104 instance_ls optimization
This commit is contained in:
+1
-1
@@ -51,7 +51,7 @@
|
||||
|
||||
//variables.framework.docs={};
|
||||
variables.framework.docs.APIName="Deck API";
|
||||
variables.framework.docs.APIVersion="0.103";
|
||||
variables.framework.docs.APIVersion="0.104";
|
||||
|
||||
variables.framework.globalHeaders = structNew();
|
||||
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
|
||||
|
||||
+109
-42
@@ -149,54 +149,40 @@
|
||||
<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 io.operation from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as last_operation</m:field>
|
||||
<m:field>(select io.instance_operation_uid::text from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as last_operation_uid</m:field>
|
||||
<m:field>(select io.submit_result from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as submit_result</m:field>
|
||||
<m:field>io.operation as last_operation</m:field>
|
||||
<m:field>io.instance_operation_uid::text as last_operation_uid</m:field>
|
||||
<m:field>io.submit_result as submit_result</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 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>(select to_char(io.dt_start, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as operation_dt_start</m:field>
|
||||
<m:field>(select to_char(io.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as operation_dt_finish</m:field>
|
||||
<m:field>(select round(extract('epoch' from coalesce(io.dt_finish,CURRENT_TIMESTAMP)- io.dt_start),1) from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as duration</m:field>
|
||||
<m:field>to_char(io.dt_start, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as operation_dt_start</m:field>
|
||||
<m:field>to_char(io.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as operation_dt_finish</m:field>
|
||||
<m:field>round(extract('epoch' from coalesce(io.dt_finish,CURRENT_TIMESTAMP)- io.dt_start),1) as duration</m:field>
|
||||
|
||||
<m:field>(select case
|
||||
<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
|
||||
from instance_operation io
|
||||
where io.instance_uid=e.instance_uid
|
||||
order by dt_submit desc
|
||||
limit 1)
|
||||
as uptime</m:field>
|
||||
as uptime</m:field>
|
||||
|
||||
<m:field>(select to_char(io.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_operation io where io.instance_uid=e.instance_uid AND io.is_successful AND io.operation='create' order by dt_submit desc limit 1) as dt_deploy</m:field>
|
||||
<m:field formatter=#function(x){return (deserializeJson(x))}#>(select instance_data::text from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as instance_data</m:field><!--- *** операция выглядит очень накладно, но можно это поле в дельнейшем не выводить --->
|
||||
<m:field>(select st.instance_state_uid::text from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as instance_state_uid</m:field>
|
||||
<m:field formatter=#request.castToBool#>(select st.is_test from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as is_test</m:field>
|
||||
<m:field formatter=#request.castToBool#>coalesce((select st.instance_data->>'isDeleted' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1),'false') as is_deleted</m:field><!--- attention it is not bool in state --->
|
||||
<m:field formatter=#request.castToBool#>(select st.instance_data->>'isSuspended' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as suspended</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 resource_realm</m:field>
|
||||
<m:field>(select to_char(st.dt_state, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as dt_state</m:field>
|
||||
<m:field>
|
||||
(case
|
||||
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'
|
||||
when
|
||||
not exists (select * from instance_state st where st.instance_uid=e.instance_uid) then 'not created'
|
||||
else null end
|
||||
) as explained_status
|
||||
</m:field>
|
||||
<m:field>(select max(version) from instance_state st where st.instance_uid=e.instance_uid) as version</m:field>
|
||||
<m:field>to_char(io.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_deploy</m:field>
|
||||
<m:field formatter=#function(x){return (deserializeJson(x))}#>st.instance_data::text as instance_data</m:field><!--- *** операция выглядит очень накладно, но можно это поле в дельнейшем не выводить --->
|
||||
<m:field>st.instance_state_uid::text as instance_state_uid</m:field>
|
||||
<m:field formatter=#request.castToBool#>st.is_test as is_test</m:field>
|
||||
<m:field formatter=#request.castToBool#>coalesce(st.instance_data->>'isDeleted','false') as is_deleted</m:field><!--- attention it is not bool in state --->
|
||||
<m:field formatter=#request.castToBool#>st.instance_data->>'isSuspended' as suspended</m:field>
|
||||
<m:field>cast(st.instance_data->>'params' as json)->>'resourceRealm' as resource_realm</m:field>
|
||||
<m:field>to_char(st.dt_state, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_state</m:field>
|
||||
<m:field>(case
|
||||
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 io.instance_uid IS NULL then 'not configured'
|
||||
when st.instance_uid IS NULL then 'not created'
|
||||
else null end
|
||||
) as explained_status</m:field>
|
||||
<m:field>st.version</m:field>
|
||||
</m:field_set>
|
||||
|
||||
<!--- <cfdump var=#definedInstanceFields#/><cfabort/> --->
|
||||
@@ -218,6 +204,17 @@
|
||||
join contragent k on (d.contragent_id=k.contragent_id)
|
||||
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 (st.instance_uid=e.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 s.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.specificationId#/>
|
||||
<cfif len(arguments.search)>
|
||||
AND (
|
||||
@@ -243,6 +240,17 @@
|
||||
join contragent k on (d.contragent_id=k.contragent_id)
|
||||
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 (st.instance_uid=e.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 s.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.specificationId#/><!--- *** make project entity --->
|
||||
<!--- u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.usrId#/> --->
|
||||
<cfif len(arguments.search)>
|
||||
@@ -259,6 +267,7 @@
|
||||
limit #arguments.pageSize#
|
||||
offset #arguments.pageSize*(arguments.page-1)#
|
||||
</cfquery>
|
||||
<!--- <cfdump var=#local.qRead#/><cfabort/> --->
|
||||
|
||||
<cfquery name="local.qTotal">
|
||||
select count(*) as cnt
|
||||
@@ -268,6 +277,19 @@
|
||||
join contract d on (s.contract_id=d.contract_id)
|
||||
join contragent k on (d.contragent_id=k.contragent_id)
|
||||
join svc v on (e.service_id=v.svc_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 (st.instance_uid=e.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)
|
||||
|
||||
<!--- specificationId инжектируется в arguments scope в Application.cfc --->
|
||||
where s.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.specificationId#/>
|
||||
<!--- u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.usrId#/> --->
|
||||
@@ -302,7 +324,7 @@
|
||||
</cffunction><!--- get --->
|
||||
|
||||
|
||||
<cffunction name="post" hint="(ТЕСТИРОВАНИЕ) ВНИМАНИЕ! У текущего контрагента должна быть спецификация, в которую будет вписан создаваемый экземпляр. Новая пустая запись экземпляра. Фактическое развертывание выполняется отдельно,асинхронной операцией create сконфигурированного экземпляра. Одновременно мы создаем строку в спецификации по умолчанию и связываем экземпляр с этой строкой. Первичный ключ генерируется. Текущий пользователь, контракт, спецификация получаются из контекста.">
|
||||
<cffunction name="post" hint="ВНИМАНИЕ! У текущего контрагента должна быть спецификация, в которую будет вписан создаваемый экземпляр. Новая пустая запись экземпляра. Фактическое развертывание выполняется отдельно,асинхронной операцией create сконфигурированного экземпляра. Одновременно мы создаем строку в спецификации по умолчанию и связываем экземпляр с этой строкой. Первичный ключ генерируется. Текущий пользователь, контракт, спецификация получаются из контекста.">
|
||||
<cfargument name="displayName" type="string" required=true hint="type:string"/>
|
||||
<cfargument name="serviceId" type="string" required=true hint="type:integer"/>
|
||||
<cfargument name="descr" type="string" required=false default="" hint="type:varchar (no cleanup here!)"/>
|
||||
@@ -442,3 +464,48 @@
|
||||
|
||||
</cfcomponent>
|
||||
|
||||
<!---
|
||||
select
|
||||
updater_shortname,duration,specification_id,display_name,contract_id,instance_config_dt_created,operation_is_pending,code,updater_login,operation_is_in_progress,instance_config_dt_updated,is_auxiliary,svc,service_id,dt_state,last_operation,submit_result,instance_state_uid,dt_deploy,is_test,specification_item_id,is_deleted,version,resource_realm,updater_id,operation_dt_start,operation_dt_finish,explained_status,last_operation_uid,uptime,instance_uid,suspended,instance_data,specification
|
||||
from (
|
||||
select
|
||||
to_char(e.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as instance_config_dt_created,to_char(e.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as instance_config_dt_updated,e.instance_uid::text as instance_uid,e.display_name,e.service_id,e.specification_item_id,e.is_auxiliary,d.contract_id,i.specification_id,s.specification,v.svc,v.code,e.updater_id,u.login as updater_login,u.shortname as updater_shortname,(select io.operation from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as last_operation,(select io.instance_operation_uid::text from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as last_operation_uid,(select io.submit_result from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as submit_result,(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,(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,(select to_char(io.dt_start, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as operation_dt_start,(select to_char(io.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as operation_dt_finish,(select round(extract('epoch' from coalesce(io.dt_finish,CURRENT_TIMESTAMP)- io.dt_start),1) from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as duration,(select case
|
||||
when io.operation IN ('delete', 'suspend') AND io.is_successful then 0
|
||||
when io.is_successful then extract('epoch' from CURRENT_TIMESTAMP - coalesce(io.dt_finish,CURRENT_TIMESTAMP))
|
||||
else 0 end
|
||||
from instance_operation io
|
||||
where io.instance_uid=e.instance_uid
|
||||
order by dt_submit desc
|
||||
limit 1)
|
||||
as uptime,(select to_char(io.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_operation io where io.instance_uid=e.instance_uid AND io.is_successful AND io.operation='create' order by dt_submit desc limit 1) as dt_deploy,(select instance_data::text from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as instance_data,(select st.instance_state_uid::text from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as instance_state_uid,(select st.is_test from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as is_test,coalesce((select st.instance_data->>'isDeleted' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1),'false') as is_deleted,(select st.instance_data->>'isSuspended' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as suspended,(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 resource_realm,(select to_char(st.dt_state, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as dt_state,
|
||||
(case
|
||||
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'
|
||||
when
|
||||
not exists (select * from instance_state st where st.instance_uid=e.instance_uid) then 'not created'
|
||||
else null end
|
||||
) as explained_status
|
||||
,(select max(version) from instance_state st where st.instance_uid=e.instance_uid) as version
|
||||
from instance e
|
||||
join specification_item i on (e.specification_item_id=i.specification_item_id)
|
||||
join specification s on (i.specification_id=s.specification_id)
|
||||
join contract d on (s.contract_id=d.contract_id)
|
||||
join contragent k on (d.contragent_id=k.contragent_id)
|
||||
join svc v on (e.service_id=v.svc_id)
|
||||
left outer join usr u on (e.updater_id=u.usr_id)
|
||||
where s.specification_id=2
|
||||
) inr
|
||||
where 1=1
|
||||
order by 1 desc
|
||||
limit 100
|
||||
offset 100
|
||||
--->
|
||||
Reference in New Issue
Block a user