036 instance_ls field set limited
This commit is contained in:
@@ -7,22 +7,44 @@
|
||||
|
||||
<!---спецификация полей, пригодных для фильтрации (?и сортировки)--->
|
||||
<cfset this.fieldsSpec={
|
||||
dt_created={prefix="e", type="date"},
|
||||
dt_updated={prefix="e", type="date"},
|
||||
display_name={prefix="e", type="string"},
|
||||
service_id={prefix="e", type="integer"},
|
||||
specification_item_id={prefix="e", type="integer"},
|
||||
contract_id={prefix="d", type="integer"},
|
||||
specification_id={prefix="i", type="integer"},
|
||||
svc={prefix="v", type="string"},
|
||||
is_test={prefix="e", type="boolean"}
|
||||
"instance_uid"={prefix="inr", type="guid"},
|
||||
"dt_created"={prefix="inr", type="date"},
|
||||
"dt_updated"={prefix="inr", type="date"},
|
||||
"instance_config_dt_created"={prefix="inr", type="date"},
|
||||
"instance_config_dt_updated"={prefix="inr", type="date"},
|
||||
"display_name"={prefix="inr", type="string"},
|
||||
"service_id"={prefix="inr", type="integer"},
|
||||
"specification_item_id"={prefix="inr", type="integer"},
|
||||
"contract_id"={prefix="inr", type="integer"},
|
||||
"specification_id"={prefix="inr", type="integer"},
|
||||
"svc"={prefix="inr", type="string"},
|
||||
"code"={prefix="inr", type="string"},
|
||||
"last_operation"={prefix="inr", type="string"},
|
||||
"last_operation_uid"={prefix="inr", type="guid"},
|
||||
"submit_result"={prefix="inr", type="string"},
|
||||
"operation_dt_start"={prefix="inr", type="date"},
|
||||
"operation_dt_finish"={prefix="inr", type="date"},
|
||||
"duration"={prefix="inr", type="numeric"},
|
||||
"uptime"={prefix="inr", type="numeric"},
|
||||
"dt_deploy"={prefix="inr", type="date"},
|
||||
"instance_data"={prefix="inr", type="string"},
|
||||
"instance_state_uid"={prefix="inr", type="guid"},
|
||||
"is_deleted"={prefix="inr", type="string"},<!--- not bool --->
|
||||
"suspended"={prefix="inr", type="string"},<!--- not bool --->
|
||||
"is_test"={prefix="inr", type="boolean"},
|
||||
"explained_status"={prefix="inr", type="string"},
|
||||
"version"={prefix="inr", type="integer"}
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
|
||||
<cffunction name="get" hint="Список экземпляров сервисов, принадлежащих данному клиенту">
|
||||
<cfargument name="pageSize" type="string" hint="type:integer" default="100"/>
|
||||
<cfargument name="page" type="string" hint="type:integer" default="1"/>
|
||||
<cfargument name="orderBy" type="string" hint="type:string, description:comma-separated list of fields to sort by, example:fld1.ASC,fld2.DESC,fld3.ASC" default=""/>
|
||||
<cfargument name="orderBy" type="string" hint="type:string, description:comma-separated list of fields to sort by, example:fld1.ASC,fld2.DESC,fld3.ASC (performance not assured on arbitrary sorting)" default=""/>
|
||||
<cfargument name="fields" type="string" hint="type:string, description:comma-separated list of fields to limit output to, empty string for default field set" default=""/>
|
||||
<!---сюда можно воткнуть спецификацию полей для сортировки и фильтрации, но только ручками, идея компактного кода еще более отдаляется--->
|
||||
|
||||
<!---parse and validate request parameters--->
|
||||
@@ -30,12 +52,17 @@
|
||||
<cftry>
|
||||
<cfset this.helper.validateField(arguments, "pageSize", "integer")/>
|
||||
<cfset this.helper.validateField(arguments, "page", "integer")/>
|
||||
|
||||
|
||||
<!---мы мирно игнорируем поля, отсутствующие в спецификации, что позволяет не делать исключения для orderBy и т.п.--->
|
||||
<cfset var filter=this.helper.parseFilterParams(this.fieldsSpec)/>
|
||||
<!--- <cfset var order=this.helper.parseOrderBy(this.fieldsSpec, arguments.orderBy)/> --->
|
||||
<!--- <cfset var order=this.helper.parseOrderBy(this.fieldsSpec, arguments.orderBy)/> --->
|
||||
<cfset var order=this.helper.parseOrderBy(this.fieldsSpec, arguments.orderBy)/>
|
||||
<cfset local.fields=""/>
|
||||
<cfloop collection=#this.fieldsSpec# item="fld"><cfoutput>#this.helper.snake2camel(trim(fld))#</cfoutput>
|
||||
<cfif listFind(arguments.fields, this.helper.snake2camel(trim(fld)))
|
||||
OR structKeyExists(order,this.helper.snake2camel(trim(fld)))>
|
||||
<cfset local.fields=listAppend(local.fields,trim(fld))/>
|
||||
</cfif>
|
||||
</cfloop>
|
||||
|
||||
<cfcatch type="invalidParamValue">
|
||||
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
||||
@@ -52,6 +79,9 @@
|
||||
--->
|
||||
<cfquery name="local.qRead" result="local.result">
|
||||
select
|
||||
<cfif listLen(local.fields)>#local.fields#<cfelse>*</cfif>
|
||||
from (
|
||||
select
|
||||
<m:field_set titleMapOut="local.titleMap" lengthOut="local.fieldCount">
|
||||
<m:field>e.instance_uid::text as instance_uid</m:field>
|
||||
<m:field>e.display_name</m:field>
|
||||
@@ -74,7 +104,7 @@
|
||||
<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>(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 extract('epoch' from coalesce(io.dt_finish,CURRENT_TIMESTAMP)- io.dt_start) from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as duration</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>(select case 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>
|
||||
<m:field>(select io.dt_finish 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>
|
||||
<!--- *** не то же самое, что в DETAIL view! --->
|
||||
@@ -84,8 +114,8 @@
|
||||
<m:field>(select st.instance_data->>'isDeleted' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as is_deleted</m:field>
|
||||
<m:field>(select st.instance_data->>'suspended' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as suspended</m:field>
|
||||
<!--- <m:field>(select st.instance_data->>'grafanaUrl' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as grafana_url</m:field> --->
|
||||
<m:field>(
|
||||
case
|
||||
<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
|
||||
@@ -97,7 +127,8 @@
|
||||
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><!--- ******** (сделать тест кейсы) еще ситуация, когда не завершена операция create, но есть первый стейт --->
|
||||
) as explained_status
|
||||
</m:field><!--- ******** (сделать тест кейсы) еще ситуация, когда не завершена операция create, но есть первый стейт --->
|
||||
<m:field>(select max(version) from instance_state st where st.instance_uid=e.instance_uid) as version</m:field>
|
||||
</m:field_set>
|
||||
|
||||
@@ -109,10 +140,14 @@
|
||||
join svc v on (e.service_id=v.svc_id)
|
||||
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#/> --->
|
||||
<m:filter_build filter=#filter#/>
|
||||
order by <m:order_build sortCollection=#this.helper.parseNumericOrder(local.titleMap, arguments.orderBy)# fieldCount=0/><!---no sort length limit--->
|
||||
|
||||
) inr
|
||||
where 1=1 <m:filter_build filter=#filter#/>
|
||||
<!--- order by <m:order_build sortCollection=#this.helper.parseNumericOrder(local.titleMap, arguments.orderBy)# fieldCount=0/> ---><!--- из-за нефиксированного числа колонок труднее становится использовать цифровую нотацию --->
|
||||
order by <m:order_build sortCollection=#order# fieldCount=0/><!---no sort length limit--->
|
||||
limit #maxrows#
|
||||
</cfquery>
|
||||
<!---<cfdump var=#local.qRead#/><cfabort/> --->
|
||||
|
||||
<cfquery name="local.qTotal">
|
||||
select count(*) as cnt
|
||||
|
||||
Reference in New Issue
Block a user