Files
reader/s3current.cfm
T
2025-08-20 11:00:47 +03:00

115 lines
4.1 KiB
Plaintext

<cfimport prefix="d" taglib="lib/data"/>
<cfimport prefix="layout" taglib="layout"/>
<cfparam name="account" default="1445"/>
<cfquery name="qS3Current" datasource="billing-s3">
select * from s3billing.buckets_current_stat(<cfqueryparam cfsqltype="cf_sql_varchar" value=#account#/>)
</cfquery>
<!--- <cfdump var=#qS3Current#/> --->
<style>
body, table {font-family: tahoma, verdana, arial;}
table {border-collapse:collapse; border: 1px solid gray;}
td,th {border: 1px solid gray; padding:.3em;}
</style>
Имена колонок из резалтсета (универсальный код) select * from s3billing.buckets_current_stat(account)
<table>
<tr>
<cfoutput>
<cfloop list=#queryColumnList(qS3Current)# item="col">
<th>#col#</th>
</cfloop>
</cfoutput>
</tr>
<cfoutput query="qS3Current">
<tr>
<cfloop list=#queryColumnList(qS3Current)# item="col">
<td>#qS3Current[col]#</td>
</cfloop>
</tr>
</cfoutput>
</table>
Колонки поименованы в шаблоне
<cfquery name="qS3CurrentM" datasource="billing-s3">
select
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
<d:field title="Bucket">name</d:field>
<d:field title="Placement">placement</d:field>
<d:field title="Квота вкл.">bucket_quota_enabled</d:field>
<d:field title="Квота на объем">bucket_quota_max_size</d:field>
<d:field title="Квота на число объектов">bucket_quota_max_objects</d:field>
<d:field title="Объем">usage_rgw_main_size_actual</d:field>
<d:field title="Число объектов">usage_rgw_main_num_objects</d:field>
</d:field_set>
from s3billing.buckets_current_stat(<cfqueryparam cfsqltype="cf_sql_varchar" value=#account#/>)
</cfquery>
<table>
<thead>
<tr>
<layout:grid_head titleMap=#titleMap#>
<td width="5%"><layout:column_head name="name" arrows=false/></td>
<td width="5%"><layout:column_head name="placement" arrows=false/></td>
<td width="5%"><layout:column_head name="bucket_quota_enabled" arrows=false/></td>
<td width="5%"><layout:column_head name="bucket_quota_max_size" arrows=false/></td>
<td width="5%"><layout:column_head name="bucket_quota_max_objects" arrows=false/></td>
<td width="5%"><layout:column_head name="usage_rgw_main_size_actual" arrows=false/></td>
<td width="5%"><layout:column_head name="usage_rgw_main_num_objects" arrows=false/></td>
</layout:grid_head>
</tr>
</thead>
<cfoutput query="qS3CurrentM">
<tr>
<td>#name#</td>
<td>#placement#</td>
<td>#bucket_quota_enabled#</td>
<td>#bucket_quota_max_size#</td>
<td>#bucket_quota_max_objects#</td>
<td>#usage_rgw_main_size_actual#</td>
<td>#usage_rgw_main_num_objects#</td>
</tr>
</cfoutput>
</table>
Резалтсет в JSON (названия колонок переведены в camelCase)
<pre>
<cfoutput>#query2json(qS3CurrentM,true)#</cfoutput>
</pre>
<cffunction name="query2json"
output="false"
hint="print query in json format as array of structures">
<cfargument name="qry" type="query" required="true"/><!--- column names should not contain commas --->
<cfargument name="convertSnakeToCamel" type="boolean" default=true/>
<cfset var columnsIn=#arguments.qry.columnList()#/>
<cfset var columnsOut=""/>
<cfif arguments.convertSnakeToCamel>
<cfloop list=#columnsIn# item="col">
<cfset columnsOut=listAppend(columnsOut,snake2camel(col))/>
</cfloop>
<cfset var outArray=arrayNew(1)/>
//copy fields to structure, renaming fields, this preserves data type
<cfloop query=#arguments.qry#>
<cfset var structRow=structNew()/>
<cfloop index="i" from="1" to=#listLen(columnsOut)#>
<cfset structInsert(structRow,"#listGetAt(#columnsOut#,i)#",arguments.qry["#listGetAt(#columnsIn#,i)#"])/>
</cfloop>
<cfset arrayAppend(outArray,structRow)/>
</cfloop>
<cfreturn serializeJSON(outArray)/>
<cfelse>
<cfreturn serializeJSON(arguments.qry,"struct")/>
</cfif>
</cffunction>
<cffunction name="snake2camel"
returntype="string"
output="false"
hint="convert snake style name to camel style name">
<cfargument name="snake" type="string" required="true" />
<cfreturn #reReplace(ARGUMENTS.snake,"_([a-z])","\u\1","ALL")#/>
</cffunction>