From caaab5e0f74d23071fe1e679cef964e0cc7bde4a Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 11 May 2026 19:50:50 +0300 Subject: [PATCH] 019 day loop --- 1.cfm | 8 +- Application.cfc | 35 +- etc/2do.txt | 6 + etc/db/billing_schema.sql | 595 ++++++++ etc/db/billing_schema2.sql | 1766 ++++++++++++++++++++++ etc/db/billing_schema_dev.sql | 72 + etc/db/billing_schema_s3.sql | 828 ++++++++++ etc/db/billing_schema_vc.sql | 278 ++++ etc/db/indexes.sql | 9 + {mod => etc/trash}/payg.cfm.bak | 0 payg2.cfm.bak => etc/trash/payg2.cfm.bak | 0 mod/crm_contract.cfm | 94 ++ mod/payg.cfm | 543 ++++--- mod/payg.cfm.1.bak | 346 +++++ payg.cfm | 17 +- 15 files changed, 4335 insertions(+), 262 deletions(-) create mode 100644 etc/2do.txt create mode 100644 etc/db/billing_schema.sql create mode 100644 etc/db/billing_schema2.sql create mode 100644 etc/db/billing_schema_dev.sql create mode 100644 etc/db/billing_schema_s3.sql create mode 100644 etc/db/billing_schema_vc.sql create mode 100644 etc/db/indexes.sql rename {mod => etc/trash}/payg.cfm.bak (100%) rename payg2.cfm.bak => etc/trash/payg2.cfm.bak (100%) create mode 100644 mod/crm_contract.cfm create mode 100644 mod/payg.cfm.1.bak diff --git a/1.cfm b/1.cfm index 1892075..9f0caf1 100644 --- a/1.cfm +++ b/1.cfm @@ -7,9 +7,5 @@ test ---> - - - - Log Out: #request.logout_url# - - + + diff --git a/Application.cfc b/Application.cfc index 5546152..72b0047 100644 --- a/Application.cfc +++ b/Application.cfc @@ -15,6 +15,7 @@ + @@ -24,8 +25,9 @@ + - + @@ -75,7 +77,7 @@ - + @@ -151,7 +153,7 @@ - + @@ -175,12 +177,11 @@ + var requestData = GetHttpRequestData(); var headers = requestData.headers; - - //writedump(headers); flush; - if (structKeyExists(headers,"authorization")) { + if (structKeyExists(headers,"authorization")) { // аутентификация для клиента ЛК var authorizationHeader = headers.authorization; if (authorizationHeader.startsWith("Bearer ")) { var bearerToken = Mid(authorizationHeader, 8); @@ -211,7 +212,9 @@ } result = prefix.filecontent; var idpUserData=deserializeJson(result); - request.auth.wz=idpUserData.userInfo.ClientId;//GUID! + //request.auth.wz=idpUserData.userInfo.ClientId;//GUID! + + request.auth.login = idpUserData.userInfo.login; //request.usrUid=idpUserData.userInfo.contactId;//userId; //GUID! //writedump(idpUserData);abort; @@ -240,14 +243,14 @@ // Приклеивать query_string как-то не пришлось, браузер сам справляется // refresh - idp = new lib.oauth2(this.client_id, this.client_secret, this.auth_endpoint, this.access_token_endpoint, this.redirect_uri); - resp = idp.refreshAccessTokenRequest(request.auth.refresh_token); + var idp = new lib.oauth2(this.client_id, this.client_secret, this.auth_endpoint, this.access_token_endpoint, this.redirect_uri); + var resp = idp.refreshAccessTokenRequest(request.auth.refresh_token); lock scope="application" type="readonly" timeout="1" { idpCertificate = application.idpCertificate; } - auth = parseIdpresponse(resp, idpCertificate, this.client_secret); //все эти сложности из-за опасений насчет многопоточности и блокировок + var auth = parseIdpresponse(resp, idpCertificate, this.client_secret); //все эти сложности из-за опасений насчет многопоточности и блокировок lock scope="session" type="exclusive" timeout="1" { session.auth = auth; @@ -264,7 +267,7 @@ session.auth_state = request.auth_state; } - idp = new lib.oauth2(this.client_id, this.client_secret, this.auth_endpoint, this.access_token_endpoint, this.redirect_uri); + var idp = new lib.oauth2(this.client_id, this.client_secret, this.auth_endpoint, this.access_token_endpoint, this.redirect_uri); /* часто появляется ошибка: после неудачного запроса к IDP в адресной строке браузера остается все, с чем его редиректил IDP, @@ -278,13 +281,13 @@ try { //writeOutput("idp.makeAccessTokenRequest"); //writeOutput(getTickCount()-request.startTickCount); - resp = idp.makeAccessTokenRequest(url.code); + var resp = idp.makeAccessTokenRequest(url.code); lock scope="application" type="readonly" timeout="1" { idpCertificate = application.idpCertificate; } - auth = parseIdpresponse(resp, idpCertificate, this.client_secret); //все эти сложности из-за опасений насчет многопоточности и блокировок + var auth = parseIdpresponse(resp, idpCertificate, this.client_secret); //все эти сложности из-за опасений насчет многопоточности и блокировок lock scope="session" type="exclusive" timeout="1" { session.auth = auth; @@ -294,7 +297,7 @@ } catch (e) {echo('
****************** #e.message# : #e.detail# **************');} } else { //отправляем браузер к IDP - strURL =idp.buildRedirectToAuthURL({"scope":'openid profile email',"state":request.auth_state,"allow_signup":false}); + var strURL =idp.buildRedirectToAuthURL({"scope":'openid profile email',"state":request.auth_state,"allow_signup":false}); echo('self-made Auth link (idp) #strURL#

'); location(strUrl,false); } @@ -309,6 +312,8 @@ // внимание, здесь подразумевается, что redirect_uri не содержит query_string // после возвращения от IDP нам нужно будет зачистить сессию SSO, сделаем это по слову logout } + + request.auth.wz='WZ01348'; //*******************
@@ -472,7 +477,7 @@ } } - private struct function parseIdpresponse(struct resp, string certificate, string jwt_secret) { + private struct function parseIdpResponse(struct resp, string certificate, string jwt_secret) { var auth = structNew("linked"); var data = deserializeJson(arguments.resp.content); diff --git a/etc/2do.txt b/etc/2do.txt new file mode 100644 index 0000000..d422f00 --- /dev/null +++ b/etc/2do.txt @@ -0,0 +1,6 @@ +корректный период +другие WZ +? full join +детализация - для S3 это бакеты + + diff --git a/etc/db/billing_schema.sql b/etc/db/billing_schema.sql new file mode 100644 index 0000000..caaf1d3 --- /dev/null +++ b/etc/db/billing_schema.sql @@ -0,0 +1,595 @@ +база rpt сделана из базы billing (название изменено, чтобы избежать путаницы) +-- удалены последовательности, переназначены владельцы и права +-- удалены внешние ключи + +-- создать роль dbo (владелец), без connect +-- создать пользователя nifi, с правом логина +-- создать пользователя appserver, с правом логина +-- дать права пользователю nifi на схемы и таблицы +-- дать права пользователю appserver на схемы и таблицы на чтение + +SET ROLE postgres; + +CREATE SCHEMA IF NOT EXISTS s3billing; +CREATE SCHEMA IF NOT EXISTS ngcloud_ru; + +ALTER SCHEMA s3billing OWNER TO dbo; +ALTER SCHEMA ngcloud_ru OWNER TO dbo; +ALTER DATABASE rpt SET search_path TO s3billing, ngcloud_ru; + +ALTER DEFAULT PRIVILEGES FOR ROLE dbo, postgres GRANT ALL ON TABLES TO nifi; +ALTER DEFAULT PRIVILEGES FOR ROLE dbo, postgres GRANT SELECT ON TABLES TO appserver; + +SET ROLE dbo; + +GRANT USAGE ON SCHEMA s3billing TO appserver,nifi; +GRANT USAGE ON SCHEMA ngcloud_ru TO appserver,nifi; + +GRANT ALL ON ALL TABLES IN SCHEMA s3billing TO nifi; +GRANT SELECT ON ALL TABLES IN SCHEMA s3billing TO appserver; + +GRANT ALL ON ALL TABLES IN SCHEMA ngcloud_ru TO nifi; +GRANT SELECT ON ALL TABLES IN SCHEMA ngcloud_ru TO appserver; + +--GRANT ALL ON ALL SEQUENCES IN SCHEMA s3billing TO appserver,nifi; +--GRANT ALL ON ALL SEQUENCES IN SCHEMA ngcloud_ru TO appserver,nifi; + + +--ALTER DEFAULT PRIVILEGES FOR ROLE dbo GRANT ALL ON SEQUENCES TO appserver,nifi; + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 16.0 +-- Dumped by pg_dump version 16.4 + +-- Started on 2025-09-15 09:50:58 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- TOC entry 230 (class 1259 OID 2160668) +-- Name: bucket_info; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +DROP TABLE IF EXISTS s3billing.bucket_info; +CREATE TABLE s3billing.bucket_info ( + id integer NOT NULL, + bucket_id character varying(255) NOT NULL, + name character varying(255) NOT NULL, + marker character varying(255) NOT NULL, + placement_id bigint DEFAULT 0 NOT NULL +); + + + + +-- +-- TOC entry 226 (class 1259 OID 2160642) +-- Name: bucket_stat; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS s3billing.bucket_stat; +CREATE TABLE s3billing.bucket_stat ( + bucket_id bigint, + num_shards bigint NOT NULL, + tenant character varying(255) DEFAULT NULL::character varying, + zone_group bigint NOT NULL, + placement_id bigint NOT NULL, + explicit_placement_data_pool character varying(255) DEFAULT NULL::character varying, + explicit_placement_data_extra_pool character varying(255) DEFAULT NULL::character varying, + explicit_placement_index_pool character varying(255) DEFAULT NULL::character varying, + index_type_id bigint NOT NULL, + versioned boolean DEFAULT false, + versioning_enabled boolean DEFAULT false, + object_lock_enabled boolean DEFAULT false, + mfa_enabled boolean DEFAULT false, + owner character varying(255) NOT NULL, + bucket_quota_enabled boolean DEFAULT false, + bucket_quota_check_on_raw boolean DEFAULT false, + bucket_quota_max_size bigint NOT NULL, + bucket_quota_max_size_kb bigint NOT NULL, + bucket_quota_max_objects bigint NOT NULL, + usage_rgw_main_size bigint NOT NULL, + usage_rgw_main_size_actual bigint NOT NULL, + usage_rgw_main_size_utilized bigint NOT NULL, + usage_rgw_main_size_kb bigint NOT NULL, + usage_rgw_main_size_kb_actual bigint NOT NULL, + usage_rgw_main_size_kb_utilized bigint NOT NULL, + usage_rgw_main_num_objects bigint NOT NULL, + usage_rgw_multimeta_size bigint, + usage_rgw_multimeta_size_actual bigint, + usage_rgw_multimeta_size_utilized bigint, + usage_rgw_multimeta_size_kb bigint, + usage_rgw_multimeta_size_kb_actual bigint, + usage_rgw_multimeta_size_kb_utilized bigint, + usage_rgw_multimeta_num_objects bigint, + creation_time timestamp without time zone NOT NULL, + mtime timestamp without time zone NOT NULL, + timestamp_addition timestamp without time zone DEFAULT date_trunc('hour'::text, CURRENT_TIMESTAMP) +); + +-- +-- TOC entry 245 (class 1259 OID 2160763) +-- Name: category; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS s3billing.category; +CREATE TABLE s3billing.category ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + +-- +-- TOC entry 225 (class 1259 OID 2160635) +-- Name: goose_db_version; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS s3billing.goose_db_version; +CREATE TABLE s3billing.goose_db_version ( + id integer NOT NULL, + version_id bigint NOT NULL, + is_applied boolean NOT NULL, + tstamp timestamp without time zone DEFAULT now() NOT NULL +); + + +-- +-- TOC entry 234 (class 1259 OID 2160684) +-- Name: index_type; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS index_type; +CREATE TABLE s3billing.index_type ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + + +-- +-- TOC entry 232 (class 1259 OID 2160677) +-- Name: placement; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS s3billing.placement; +CREATE TABLE s3billing.placement ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + + + +-- +-- TOC entry 239 (class 1259 OID 2160705) +-- Name: usage_bucket_by_user; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS s3billing.usage_bucket_by_user; +CREATE TABLE s3billing.usage_bucket_by_user ( + bucketid bigint, + "time" timestamp without time zone NOT NULL, + bytes_sent bigint NOT NULL, + bytes_received bigint NOT NULL, + ops bigint NOT NULL, + successful_ops bigint NOT NULL, + date_start timestamp without time zone NOT NULL, + date_end timestamp without time zone NOT NULL, + user_id bigint NOT NULL, + category_id bigint NOT NULL +); + + +-- +-- TOC entry 238 (class 1259 OID 2160698) +-- Name: usage_stat_summary; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS s3billing.usage_stat_summary; +CREATE TABLE s3billing.usage_stat_summary ( + id integer NOT NULL, + userid character varying(255) NOT NULL, + category character varying(255) NOT NULL, + bytes_sent bigint NOT NULL, + bytes_received bigint NOT NULL, + ops bigint NOT NULL, + successful_ops bigint NOT NULL, + date_start timestamp without time zone NOT NULL, + date_end timestamp without time zone NOT NULL +); + + +-- +-- TOC entry 236 (class 1259 OID 2160691) +-- Name: usage_stat_total; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS s3billing.usage_stat_total; +CREATE TABLE s3billing.usage_stat_total ( + id integer NOT NULL, + userid character varying(255) NOT NULL, + bytes_sent bigint NOT NULL, + bytes_received bigint NOT NULL, + ops bigint NOT NULL, + successful_ops bigint NOT NULL, + date_start timestamp without time zone NOT NULL, + date_end timestamp without time zone NOT NULL +); + +-- +-- TOC entry 243 (class 1259 OID 2160751) +-- Name: user_info; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS s3billing.user_info; +CREATE TABLE s3billing.user_info ( + id integer NOT NULL, + name character varying(255) NOT NULL, + owner character varying(255) NOT NULL +); + + +-- +-- TOC entry 241 (class 1259 OID 2160712) +-- Name: user_quota_bucket; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS s3billing.user_quota_bucket; +CREATE TABLE s3billing.user_quota_bucket ( + id integer NOT NULL, + userid character varying(255) NOT NULL, + enabled boolean DEFAULT false, + check_on_raw boolean DEFAULT false, + max_size bigint NOT NULL, + max_size_kb bigint NOT NULL, + max_objects bigint NOT NULL +); + + +-- +-- TOC entry 228 (class 1259 OID 2160661) +-- Name: zone_group; Type: TABLE; Schema: s3billing; Owner: s3billing +-- +DROP TABLE IF EXISTS s3billing.zone_group; +CREATE TABLE s3billing.zone_group ( + id integer NOT NULL, + name uuid NOT NULL +); + +-- +-- TOC entry 3278 (class 2606 OID 2160675) +-- Name: bucket_info bucket_info_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.bucket_info + ADD CONSTRAINT bucket_info_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3273 (class 2606 OID 2476484) +-- Name: bucket_stat bucket_stat_unique; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +--ALTER TABLE ONLY s3billing.bucket_stat +-- ADD CONSTRAINT bucket_stat_unique UNIQUE (bucket_id, placement_id, timestamp_addition); + +ALTER TABLE ONLY s3billing.bucket_stat + ADD CONSTRAINT bucket_stat_pkey PRIMARY KEY (bucket_id, placement_id, timestamp_addition); + + +-- +-- TOC entry 3298 (class 2606 OID 2160768) +-- Name: category category_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.category + ADD CONSTRAINT category_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3270 (class 2606 OID 2160640) +-- Name: goose_db_version goose_db_version_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.goose_db_version + ADD CONSTRAINT goose_db_version_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3284 (class 2606 OID 2160689) +-- Name: index_type index_type_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.index_type + ADD CONSTRAINT index_type_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3282 (class 2606 OID 2160682) +-- Name: placement placement_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.placement + ADD CONSTRAINT placement_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3290 (class 2606 OID 2476705) +-- Name: usage_bucket_by_user usage_bucket_by_user_unique; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +--ALTER TABLE ONLY s3billing.usage_bucket_by_user +-- ADD CONSTRAINT usage_bucket_by_user_unique UNIQUE (bucketid, date_start, date_end, user_id, category_id); +ALTER TABLE ONLY s3billing.usage_bucket_by_user + ADD CONSTRAINT usage_bucket_by_user_pkey PRIMARY KEY (bucketid, date_start, date_end, user_id, category_id); + + +-- +-- TOC entry 3288 (class 2606 OID 2160703) +-- Name: usage_stat_summary usage_stat_summary_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_stat_summary + ADD CONSTRAINT usage_stat_summary_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3286 (class 2606 OID 2160696) +-- Name: usage_stat_total usage_stat_total_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_stat_total + ADD CONSTRAINT usage_stat_total_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3295 (class 2606 OID 2160758) +-- Name: user_info user_info_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.user_info + ADD CONSTRAINT user_info_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3292 (class 2606 OID 2160719) +-- Name: user_quota_bucket user_quota_bucket_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.user_quota_bucket + ADD CONSTRAINT user_quota_bucket_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3275 (class 2606 OID 2160666) +-- Name: zone_group zone_group_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.zone_group + ADD CONSTRAINT zone_group_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3276 (class 1259 OID 2474077) +-- Name: bucket_info_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX bucket_info_name_idx ON s3billing.bucket_info USING btree (name); + + +-- +-- TOC entry 3279 (class 1259 OID 2474078) +-- Name: bucket_info_placement_id_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX bucket_info_placement_id_idx ON s3billing.bucket_info USING btree (placement_id); + + +-- +-- TOC entry 3271 (class 1259 OID 2474094) +-- Name: bucket_stat_owner_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX bucket_stat_owner_idx ON s3billing.bucket_stat USING btree (owner); + + +-- +-- TOC entry 3296 (class 1259 OID 2474445) +-- Name: category_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE UNIQUE INDEX category_name_idx ON s3billing.category USING btree (name); + + +-- +-- TOC entry 3280 (class 1259 OID 2474468) +-- Name: placement_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE UNIQUE INDEX placement_name_idx ON s3billing.placement USING btree (name); + + +-- +-- TOC entry 3293 (class 1259 OID 2474438) +-- Name: user_info_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX user_info_name_idx ON s3billing.user_info USING btree (name); + + + +-- Completed on 2025-09-15 09:50:59 + +-- +-- PostgreSQL database dump complete +-- + +------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------- + +DROP TABLE IF EXISTS ngcloud_ru.capacity_resource; +CREATE TABLE ngcloud_ru.capacity_resource ( + vdc_id uuid NOT NULL, + "timestamp" timestamp with time zone NOT NULL, + cpu_allocated integer NOT NULL, + cpu_limit integer NOT NULL, + cpu_reserved integer NOT NULL, + cpu_used integer NOT NULL, + cpu_speed integer NOT NULL, + mem_allocated integer NOT NULL, + mem_limit integer NOT NULL, + mem_reserved integer NOT NULL, + mem_used integer NOT NULL +); + +-- +-- TOC entry 223 (class 1259 OID 1893993) +-- Name: capacity_storage; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- +DROP TABLE IF EXISTS ngcloud_ru.capacity_storage; +CREATE TABLE ngcloud_ru.capacity_storage ( + vdc_id uuid NOT NULL, + storage_profile_types_id integer NOT NULL, + "timestamp" timestamp with time zone NOT NULL, + id uuid NOT NULL, + "limit" integer NOT NULL, + used integer NOT NULL +); + +-- +-- TOC entry 220 (class 1259 OID 1893965) +-- Name: storage_profile_types; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- +DROP TABLE IF EXISTS ngcloud_ru.storage_profile_types; +CREATE TABLE ngcloud_ru.storage_profile_types ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + +-- +-- TOC entry 218 (class 1259 OID 1893959) +-- Name: tenant; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- +DROP TABLE IF EXISTS ngcloud_ru.tenant; +CREATE TABLE ngcloud_ru.tenant ( + id uuid NOT NULL, + name character varying(255) NOT NULL, + wzcode bigint +); + + +-- +-- TOC entry 221 (class 1259 OID 1893973) +-- Name: vdc; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- +DROP TABLE IF EXISTS ngcloud_ru.vdc; +CREATE TABLE ngcloud_ru.vdc ( + id uuid NOT NULL, + tenant_id uuid NOT NULL, + name character varying(255) NOT NULL +); + + + + + +-- +-- TOC entry 3255 (class 2606 OID 1893987) +-- Name: capacity_resource capacity_resource_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_resource + ADD CONSTRAINT capacity_resource_pkey PRIMARY KEY (vdc_id, "timestamp"); + + +-- +-- TOC entry 3257 (class 2606 OID 1893997) +-- Name: capacity_storage capacity_storage_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_storage + ADD CONSTRAINT capacity_storage_pkey PRIMARY KEY (vdc_id, id, "timestamp"); + + +-- +-- TOC entry 3249 (class 2606 OID 1893972) +-- Name: storage_profile_types storage_profile_types_name_key; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.storage_profile_types + ADD CONSTRAINT storage_profile_types_name_key UNIQUE (name); + + +-- +-- TOC entry 3251 (class 2606 OID 1893970) +-- Name: storage_profile_types storage_profile_types_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.storage_profile_types + ADD CONSTRAINT storage_profile_types_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3247 (class 2606 OID 1893963) +-- Name: tenant tenant_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.tenant + ADD CONSTRAINT tenant_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3253 (class 2606 OID 1893977) +-- Name: vdc vdc_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.vdc + ADD CONSTRAINT vdc_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3259 (class 2606 OID 1893988) +-- Name: capacity_resource capacity_resource_vdc_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +--ALTER TABLE ONLY ngcloud_ru.capacity_resource +-- ADD CONSTRAINT capacity_resource_vdc_id_fkey FOREIGN KEY (vdc_id) REFERENCES ngcloud_ru.vdc(id) ON DELETE CASCADE; + + +-- +-- TOC entry 3260 (class 2606 OID 1894003) +-- Name: capacity_storage capacity_storage_storage_profile_types_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +--ALTER TABLE ONLY ngcloud_ru.capacity_storage +-- ADD CONSTRAINT capacity_storage_storage_profile_types_id_fkey FOREIGN KEY (storage_profile_types_id) REFERENCES ngcloud_ru.storage_profile_types(id); + + +-- +-- TOC entry 3261 (class 2606 OID 1893998) +-- Name: capacity_storage capacity_storage_vdc_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +--ALTER TABLE ONLY ngcloud_ru.capacity_storage +-- ADD CONSTRAINT capacity_storage_vdc_id_fkey FOREIGN KEY (vdc_id) REFERENCES ngcloud_ru.vdc(id) ON DELETE CASCADE; + + +-- +-- TOC entry 3258 (class 2606 OID 1893978) +-- Name: vdc vdc_tenant_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +--ALTER TABLE ONLY ngcloud_ru.vdc +-- ADD CONSTRAINT vdc_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES ngcloud_ru.tenant(id); + + +-- Completed on 2025-09-15 09:53:18 + +-- +-- PostgreSQL database dump complete +-- + diff --git a/etc/db/billing_schema2.sql b/etc/db/billing_schema2.sql new file mode 100644 index 0000000..71bef00 --- /dev/null +++ b/etc/db/billing_schema2.sql @@ -0,0 +1,1766 @@ +-- +-- PostgreSQL database dump +-- + +\restrict M18FnaokuZFKQZjWu9az6dzOO6o2cSlpJgAocs2PXfRbmzHVcXEXaiZZcaOPZko + +-- Dumped from database version 16.0 +-- Dumped by pg_dump version 17.6 + +-- Started on 2025-10-24 14:30:46 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET transaction_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- TOC entry 6 (class 2615 OID 1891106) +-- Name: def; Type: SCHEMA; Schema: -; Owner: dbo +-- + +CREATE SCHEMA def; + + +ALTER SCHEMA def OWNER TO dbo; + +-- +-- TOC entry 7 (class 2615 OID 1891160) +-- Name: ngcloud_ru; Type: SCHEMA; Schema: -; Owner: vc_billing +-- + +CREATE SCHEMA ngcloud_ru; + + +ALTER SCHEMA ngcloud_ru OWNER TO vc_billing; + +-- +-- TOC entry 8 (class 2615 OID 2160630) +-- Name: s3billing; Type: SCHEMA; Schema: -; Owner: s3billing +-- + +CREATE SCHEMA s3billing; + + +ALTER SCHEMA s3billing OWNER TO s3billing; + +-- +-- TOC entry 246 (class 1255 OID 2426393) +-- Name: billing(timestamp with time zone, timestamp with time zone, character varying); Type: FUNCTION; Schema: s3billing; Owner: dsorokin +-- + +CREATE FUNCTION s3billing.billing(_ds timestamp with time zone, _df timestamp with time zone, _user character varying) RETURNS TABLE(bucket_name character varying, placement character varying, size numeric, put numeric, get numeric, bytes_sent numeric) + LANGUAGE plpgsql + AS $$ +BEGIN +SELECT + s3billing.bucket_info.name AS bucket_name + ,s3billing.placement.name AS placement + ,coalesce(round(sum(usage_rgw_main_size_actual)/(24*(SELECT DATE_PART('day', (_ds-_df))))),0) AS size + ,coalesce(s2.get, 0) AS get + ,coalesce(s2.put, 0) AS put + ,coalesce(s2.bytes_sent, 0) as bytes_sent +FROM s3billing.bucket_stat +INNER JOIN s3billing.placement ON s3billing.bucket_stat.placement_id=s3billing.placement.id +INNER JOIN s3billing.bucket_info ON s3billing.bucket_stat.bucket_id=s3billing.bucket_info.id +LEFT JOIN ( + SELECT + s1.bucket_id AS bucket_id + ,s1.bucket_name AS bucket_name + ,s1.placement AS placement + ,coalesce(sum(s1.get) ,0) AS get + ,coalesce(sum(s1.put) ,0) AS put + ,coalesce(sum(s1.bytes_sent), 0) AS bytes_sent + FROM ( + SELECT + s3billing.bucket_info.id AS bucket_id + ,s3billing.bucket_info.name AS bucket_name + ,s3billing.placement.name AS placement + ,(CASE + WHEN ( s3billing.category.name LIKE 'get%' + OR s3billing.category.name LIKE 'head%' + OR s3billing.category.name LIKE 'options%' + ) THEN coalesce(sum(ops), 0) + END) AS get + ,(CASE + WHEN ( s3billing.category.name LIKE 'put%' + OR s3billing.category.name LIKE 'post%' + OR s3billing.category.name LIKE 'patch%' + OR s3billing.category.name LIKE 'list%' + ) THEN coalesce(sum(ops), 0) + END) AS put + ,coalesce(sum(usage_bucket_by_user.bytes_sent), 0) AS bytes_sent + FROM + s3billing.usage_bucket_by_user + INNER JOIN s3billing.bucket_info ON s3billing.usage_bucket_by_user.bucketid = s3billing.bucket_info.id + INNER JOIN s3billing.placement ON s3billing.bucket_info.placement_id = s3billing.placement.id + INNER JOIN s3billing.user_info ON s3billing.usage_bucket_by_user.user_id = s3billing.user_info.id + INNER JOIN s3billing.category ON s3billing.usage_bucket_by_user.category_id = s3billing.category.id + + WHERE + s3billing.user_info.name=_user + AND s3billing.usage_bucket_by_user.time >= _ds + AND s3billing.usage_bucket_by_user.time < _df + GROUP BY + s3billing.bucket_info.name + ,s3billing.placement.name + ,s3billing.category.name + ,s3billing.bucket_info.id + ) AS s1 + GROUP BY + s1.bucket_name + ,s1.bucket_id + ,s1.placement + ORDER BY + s1.placement + ,s1.bucket_name +) AS s2 ON s2.bucket_id = s3billing.bucket_stat.bucket_id +WHERE owner=_user + AND timestamp_addition >= _ds + AND timestamp_addition < _df +GROUP BY + s3billing.bucket_info.name + ,s3billing.placement.name + ,s3billing.bucket_stat.bucket_id + ,s2.get + ,s2.put + ,s2.bytes_sent +ORDER BY + s3billing.placement.name +,s3billing.bucket_info.name +; +END +$$; + + +ALTER FUNCTION s3billing.billing(_ds timestamp with time zone, _df timestamp with time zone, _user character varying) OWNER TO dsorokin; + +-- +-- TOC entry 260 (class 1255 OID 2434574) +-- Name: billing_per_user(character varying, character varying, character varying); Type: FUNCTION; Schema: s3billing; Owner: dsorokin +-- + +CREATE FUNCTION s3billing.billing_per_user(_ds character varying, _df character varying, _user character varying) RETURNS TABLE(bucket_name character varying, placement character varying, size numeric, get numeric, put numeric, bytes_sent numeric) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + +SELECT + s3billing.bucket_info.name AS bucket_name + ,s3billing.placement.name AS placement + ,coalesce(round(sum(usage_rgw_main_size_actual)/ + (SELECT (DATE_PART('day', + ((TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS')) + -TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS')) + )*24+ + DATE_PART('hour', + ((TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS')) + -TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS')) + ))) + + )::numeric,0) AS size + ,coalesce(s2.get, 0) AS get + ,coalesce(s2.put, 0) AS put + ,coalesce(s2.bytes_sent, 0) as bytes_sent +FROM s3billing.bucket_stat +INNER JOIN s3billing.placement ON s3billing.bucket_stat.placement_id=s3billing.placement.id +INNER JOIN s3billing.bucket_info ON s3billing.bucket_stat.bucket_id=s3billing.bucket_info.id +LEFT JOIN ( + SELECT + s1.bucket_id AS bucket_id + ,s1.bucket_name AS bucket_name + ,s1.placement AS placement + ,coalesce(sum(s1.get) ,0) AS get + ,coalesce(sum(s1.put) ,0) AS put + ,coalesce(sum(s1.bytes_sent), 0) AS bytes_sent + FROM ( + SELECT + s3billing.bucket_info.id AS bucket_id + ,s3billing.bucket_info.name AS bucket_name + ,s3billing.placement.name AS placement + ,(CASE + WHEN ( s3billing.category.name LIKE 'get%' + OR s3billing.category.name LIKE 'head%' + OR s3billing.category.name LIKE 'options%' + ) THEN coalesce(sum(ops), 0) + END) AS get + ,(CASE + WHEN ( s3billing.category.name LIKE 'put%' + OR s3billing.category.name LIKE 'post%' + OR s3billing.category.name LIKE 'patch%' + OR s3billing.category.name LIKE 'list%' + ) THEN coalesce(sum(ops), 0) + END) AS put + ,coalesce(sum(usage_bucket_by_user.bytes_sent), 0) AS bytes_sent + + FROM + s3billing.usage_bucket_by_user + INNER JOIN s3billing.bucket_info ON s3billing.usage_bucket_by_user.bucketid = s3billing.bucket_info.id + INNER JOIN s3billing.placement ON s3billing.bucket_info.placement_id = s3billing.placement.id + INNER JOIN s3billing.user_info ON s3billing.usage_bucket_by_user.user_id = s3billing.user_info.id + INNER JOIN s3billing.category ON s3billing.usage_bucket_by_user.category_id = s3billing.category.id + + WHERE + s3billing.user_info.name=_user + AND s3billing.usage_bucket_by_user.time >=TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS') + AND s3billing.usage_bucket_by_user.time < TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS') + GROUP BY + s3billing.bucket_info.name + ,s3billing.placement.name + ,s3billing.category.name + ,s3billing.bucket_info.id + ) AS s1 + + GROUP BY + s1.bucket_name + ,s1.bucket_id + ,s1.placement + + ORDER BY + s1.placement + ,s1.bucket_name + +) AS s2 ON s2.bucket_id = s3billing.bucket_stat.bucket_id +WHERE owner=_user + AND timestamp_addition >= TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS') + AND timestamp_addition < TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS') +GROUP BY + s3billing.bucket_info.name + ,s3billing.placement.name + ,s3billing.bucket_stat.bucket_id + ,s2.get + ,s2.put + ,s2.bytes_sent +ORDER BY + s3billing.placement.name +,s3billing.bucket_info.name +; +END; +$$; + + +ALTER FUNCTION s3billing.billing_per_user(_ds character varying, _df character varying, _user character varying) OWNER TO dsorokin; + +-- +-- TOC entry 261 (class 1255 OID 2435525) +-- Name: billing_per_user_fix_pl(character varying, character varying, character varying); Type: FUNCTION; Schema: s3billing; Owner: dsorokin +-- + +CREATE FUNCTION s3billing.billing_per_user_fix_pl(_ds character varying, _df character varying, _user character varying) RETURNS TABLE(bucket_name character varying, placement character varying, size numeric, get numeric, put numeric, bytes_sent numeric) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + +SELECT + s3billing.bucket_info.name AS bucket_name, + (case + when ( s3billing.placement.name = 'default-placement') then 'HOT' + WHEN ( not s3billing.placement.name = 'default-placement' ) THEN s3billing.placement.name + end + ) as placement, + coalesce(round(sum(usage_rgw_main_size_actual)/ + (SELECT (DATE_PART('day', + ((TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS')) + -TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS')) + )*24+ + DATE_PART('hour', + ((TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS')) + -TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS')) + ))) + + )::numeric,0) AS size + ,coalesce(s2.get, 0) AS get + ,coalesce(s2.put, 0) AS put + ,coalesce(s2.bytes_sent, 0) as bytes_sent +FROM s3billing.bucket_stat +INNER JOIN s3billing.placement ON s3billing.bucket_stat.placement_id=s3billing.placement.id +INNER JOIN s3billing.bucket_info ON s3billing.bucket_stat.bucket_id=s3billing.bucket_info.id +LEFT JOIN ( + SELECT + s1.bucket_id AS bucket_id + ,s1.bucket_name AS bucket_name, + (case + when ( s1.placement = 'default-placement') then 'HOT' + WHEN ( not s1.placement = 'default-placement' ) THEN s1.placement + end + ) as placement + ,coalesce(sum(s1.get) ,0) AS get + ,coalesce(sum(s1.put) ,0) AS put + ,coalesce(sum(s1.bytes_sent), 0) AS bytes_sent + FROM ( + SELECT + s3billing.bucket_info.id AS bucket_id + ,s3billing.bucket_info.name AS bucket_name + ,(case + when ( s3billing.placement.name = 'default-placement') then 'HOT' + WHEN ( not s3billing.placement.name = 'default-placement' ) THEN s3billing.placement.name + end + ) as placement + ,(CASE + WHEN ( s3billing.category.name LIKE 'get%' + OR s3billing.category.name LIKE 'head%' + OR s3billing.category.name LIKE 'options%' + ) THEN coalesce(sum(ops), 0) + END) AS get + ,(CASE + WHEN ( s3billing.category.name LIKE 'put%' + OR s3billing.category.name LIKE 'post%' + OR s3billing.category.name LIKE 'patch%' + OR s3billing.category.name LIKE 'list%' + ) THEN coalesce(sum(ops), 0) + END) AS put + ,coalesce(sum(usage_bucket_by_user.bytes_sent), 0) AS bytes_sent + + FROM + s3billing.usage_bucket_by_user + INNER JOIN s3billing.bucket_info ON s3billing.usage_bucket_by_user.bucketid = s3billing.bucket_info.id + INNER JOIN s3billing.placement ON s3billing.bucket_info.placement_id = s3billing.placement.id + INNER JOIN s3billing.user_info ON s3billing.usage_bucket_by_user.user_id = s3billing.user_info.id + INNER JOIN s3billing.category ON s3billing.usage_bucket_by_user.category_id = s3billing.category.id + + WHERE + s3billing.user_info.name=_user + AND s3billing.usage_bucket_by_user.time >=TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS') + AND s3billing.usage_bucket_by_user.time < TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS') + GROUP BY + s3billing.bucket_info.name + ,s3billing.placement.name + ,s3billing.category.name + ,s3billing.bucket_info.id + ) AS s1 + + GROUP BY + s1.bucket_name + ,s1.bucket_id + ,s1.placement + + ORDER BY + s1.placement + ,s1.bucket_name + +) AS s2 ON s2.bucket_id = s3billing.bucket_stat.bucket_id +WHERE owner=_user + AND timestamp_addition >= TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS') + AND timestamp_addition < TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS') +GROUP BY + s3billing.bucket_info.name + ,s3billing.placement.name + ,s3billing.bucket_stat.bucket_id + ,s2.get + ,s2.put + ,s2.bytes_sent +ORDER BY + s3billing.placement.name +,s3billing.bucket_info.name +; +END; +$$; + + +ALTER FUNCTION s3billing.billing_per_user_fix_pl(_ds character varying, _df character varying, _user character varying) OWNER TO dsorokin; + +-- +-- TOC entry 263 (class 1255 OID 2437728) +-- Name: billing_per_user_fix_pl_sv(character varying, character varying, character varying); Type: FUNCTION; Schema: s3billing; Owner: postgres +-- + +CREATE FUNCTION s3billing.billing_per_user_fix_pl_sv(ds character varying, df character varying, _user character varying) RETURNS TABLE(bucket_name character varying, placement character varying, size numeric, get numeric, put numeric, bytes_sent numeric) + LANGUAGE plpgsql + AS $$ + +DECLARE + _ds TIMESTAMP; + _df TIMESTAMP; + _days INT; + _hours INT; + +BEGIN +SELECT TO_TIMESTAMP(ds, 'YYYY-MM-DD HH24:MI:SS') INTO _ds; +SELECT TO_TIMESTAMP(df, 'YYYY-MM-DD HH24:MI:SS') INTO _df; +SELECT DATE_PART('day', _df - _ds) INTO _days; +SELECT CEIL(EXTRACT(EPOCH FROM (_df - _ds))/3600) INTO _hours; + +RETURN QUERY + +SELECT + s3billing.bucket_info.name AS bucket_name, + (CASE + WHEN ( s3billing.placement.name = 'default-placement') THEN 'HOT' + WHEN ( not s3billing.placement.name = 'default-placement' ) THEN s3billing.placement.name + END + ) AS placement + ,coalesce(ceil(sum(usage_rgw_main_size_actual)/_days)::numeric, 0) AS size + ,coalesce(s2.get, 0) AS get + ,coalesce(s2.put, 0) AS put + ,coalesce(s2.bytes_sent, 0) AS bytes_sent +FROM s3billing.bucket_stat +INNER JOIN s3billing.placement ON s3billing.bucket_stat.placement_id=s3billing.placement.id +INNER JOIN s3billing.bucket_info ON s3billing.bucket_stat.bucket_id=s3billing.bucket_info.id +LEFT JOIN ( + SELECT + s1.bucket_id AS bucket_id + ,s1.bucket_name AS bucket_name + ,(CASE + WHEN ( s1.placement = 'default-placement') THEN 'HOT' + WHEN ( not s1.placement = 'default-placement' ) THEN s1.placement + END + ) AS placement + ,coalesce(sum(s1.get) ,0) AS get + ,coalesce(sum(s1.put) ,0) AS put + ,coalesce(sum(s1.bytes_sent), 0) AS bytes_sent + FROM ( + SELECT + s3billing.bucket_info.id AS bucket_id + ,s3billing.bucket_info.name AS bucket_name + ,(CASE + WHEN ( s3billing.placement.name = 'default-placement') THEN 'HOT' + WHEN ( not s3billing.placement.name = 'default-placement' ) THEN s3billing.placement.name + END + ) AS placement + ,(CASE + WHEN ( s3billing.category.name LIKE 'get%' + OR s3billing.category.name LIKE 'head%' + OR s3billing.category.name LIKE 'options%' + ) THEN coalesce(sum(ops), 0) + END + ) AS get + ,(CASE + WHEN ( s3billing.category.name LIKE 'put%' + OR s3billing.category.name LIKE 'post%' + OR s3billing.category.name LIKE 'patch%' + OR s3billing.category.name LIKE 'list%' + ) THEN coalesce(sum(ops), 0) + END + ) AS put + ,coalesce(sum(usage_bucket_by_user.bytes_sent), 0) AS bytes_sent + + FROM + s3billing.usage_bucket_by_user + INNER JOIN s3billing.bucket_info ON s3billing.usage_bucket_by_user.bucketid = s3billing.bucket_info.id + INNER JOIN s3billing.placement ON s3billing.bucket_info.placement_id = s3billing.placement.id + INNER JOIN s3billing.user_info ON s3billing.usage_bucket_by_user.user_id = s3billing.user_info.id + INNER JOIN s3billing.category ON s3billing.usage_bucket_by_user.category_id = s3billing.category.id + + WHERE + s3billing.user_info.name=_user + AND s3billing.usage_bucket_by_user.time >= _ds + AND s3billing.usage_bucket_by_user.time < _df + GROUP BY + s3billing.bucket_info.name + ,s3billing.placement.name + ,s3billing.category.name + ,s3billing.bucket_info.id + ) AS s1 + + GROUP BY + s1.bucket_name + ,s1.bucket_id + ,s1.placement + + ORDER BY + s1.placement + ,s1.bucket_name + +) AS s2 ON s2.bucket_id = s3billing.bucket_stat.bucket_id +WHERE owner=_user + AND timestamp_addition >= _ds + AND timestamp_addition < _df +GROUP BY + s3billing.bucket_info.name + ,s3billing.placement.name + ,s3billing.bucket_stat.bucket_id + ,s2.get + ,s2.put + ,s2.bytes_sent +ORDER BY + s3billing.placement.name +,s3billing.bucket_info.name +; +END; +$$; + + +ALTER FUNCTION s3billing.billing_per_user_fix_pl_sv(ds character varying, df character varying, _user character varying) OWNER TO postgres; + +-- +-- TOC entry 262 (class 1255 OID 2436167) +-- Name: billing_per_user_summary(character varying, character varying, character varying); Type: FUNCTION; Schema: s3billing; Owner: dsorokin +-- + +CREATE FUNCTION s3billing.billing_per_user_summary(_ds character varying, _df character varying, _user character varying) RETURNS TABLE(placement character varying, size_gb numeric, get_10k numeric, put_10k numeric, bytes_sent_gb numeric) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY +( +select + billing_per_user_fix_pl.placement as placement, + (CASE + WHEN ( billing_per_user_fix_pl.placement = 'HOT' + ) THEN greatest(ceil(sum(size)/1024/1024/1024)-1,0) + WHEN ( not billing_per_user_fix_pl.placement = 'HOT' + ) THEN ceil(sum(size)/1024/1024/1024) + END) AS size_GB, + (CASE + WHEN ( billing_per_user_fix_pl.placement = 'HOT' + ) THEN greatest(ceil(sum(get)/10000)-10,0) + WHEN ( not billing_per_user_fix_pl.placement = 'HOT' + ) THEN ceil(sum(get)/10000) + END) AS get_10k, + (CASE + WHEN ( billing_per_user_fix_pl.placement = 'HOT' + ) THEN greatest(ceil(sum(put)/10000)-1,0) + WHEN ( not billing_per_user_fix_pl.placement = 'HOT' + ) THEN ceil(sum(put)/10000) + END) AS put_10k, + (CASE + WHEN ( billing_per_user_fix_pl.placement = 'HOT' + ) then greatest(ceil(sum(bytes_sent)/1024/1024/1024)-100,0) + WHEN ( not billing_per_user_fix_pl.placement = 'HOT' + ) THEN ceil(sum(bytes_sent)/1024/1024/1024) + END) AS bytes_sent_GB + from s3billing.billing_per_user_fix_pl(_ds,_df,_user) + group by billing_per_user_fix_pl.placement +UNION all +select + 'HOT_FREE_LIMIT' as placement, + '1' AS size_GB, + '10' AS get_10k, + '1' AS put_10k, + '100' AS bytes_sent_GB + ); +END; +$$; + + +ALTER FUNCTION s3billing.billing_per_user_summary(_ds character varying, _df character varying, _user character varying) OWNER TO dsorokin; + +-- +-- TOC entry 259 (class 1255 OID 2426971) +-- Name: billing_varchar(character varying, character varying, character varying); Type: FUNCTION; Schema: s3billing; Owner: dsorokin +-- + +CREATE FUNCTION s3billing.billing_varchar(_ds character varying, _df character varying, _user character varying) RETURNS TABLE(bucket_name character varying, placement character varying, size numeric, get numeric, put numeric, bytes_sent numeric) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY + +SELECT + s3billing.bucket_info.name AS bucket_name + ,s3billing.placement.name AS placement + ,coalesce(round(sum(usage_rgw_main_size_actual)/ + (SELECT (DATE_PART('day', + ((TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS')) + -TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS')) + )*24+ + DATE_PART('hour', + ((TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS')) + -TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS')) + ))) + + )::numeric,0) AS size + ,coalesce(s2.get, 0) AS get + ,coalesce(s2.put, 0) AS put + ,coalesce(s2.bytes_sent, 0) as bytes_sent +FROM s3billing.bucket_stat +INNER JOIN s3billing.placement ON s3billing.bucket_stat.placement_id=s3billing.placement.id +INNER JOIN s3billing.bucket_info ON s3billing.bucket_stat.bucket_id=s3billing.bucket_info.id +LEFT JOIN ( + SELECT + s1.bucket_id AS bucket_id + ,s1.bucket_name AS bucket_name + ,s1.placement AS placement + ,coalesce(sum(s1.get) ,0) AS get + ,coalesce(sum(s1.put) ,0) AS put + ,coalesce(sum(s1.bytes_sent), 0) AS bytes_sent + FROM ( + SELECT + s3billing.bucket_info.id AS bucket_id + ,s3billing.bucket_info.name AS bucket_name + ,s3billing.placement.name AS placement + ,(CASE + WHEN ( s3billing.category.name LIKE 'get%' + OR s3billing.category.name LIKE 'head%' + OR s3billing.category.name LIKE 'options%' + ) THEN coalesce(sum(ops), 0) + END) AS get + ,(CASE + WHEN ( s3billing.category.name LIKE 'put%' + OR s3billing.category.name LIKE 'post%' + OR s3billing.category.name LIKE 'patch%' + OR s3billing.category.name LIKE 'list%' + ) THEN coalesce(sum(ops), 0) + END) AS put + ,coalesce(sum(usage_bucket_by_user.bytes_sent), 0) AS bytes_sent + + FROM + s3billing.usage_bucket_by_user + INNER JOIN s3billing.bucket_info ON s3billing.usage_bucket_by_user.bucketid = s3billing.bucket_info.id + INNER JOIN s3billing.placement ON s3billing.bucket_info.placement_id = s3billing.placement.id + INNER JOIN s3billing.user_info ON s3billing.usage_bucket_by_user.user_id = s3billing.user_info.id + INNER JOIN s3billing.category ON s3billing.usage_bucket_by_user.category_id = s3billing.category.id + + WHERE + s3billing.user_info.name=_user + AND s3billing.usage_bucket_by_user.time >=TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS') + AND s3billing.usage_bucket_by_user.time < TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS') + GROUP BY + s3billing.bucket_info.name + ,s3billing.placement.name + ,s3billing.category.name + ,s3billing.bucket_info.id + ) AS s1 + + GROUP BY + s1.bucket_name + ,s1.bucket_id + ,s1.placement + + ORDER BY + s1.placement + ,s1.bucket_name + +) AS s2 ON s2.bucket_id = s3billing.bucket_stat.bucket_id +WHERE owner=_user + AND timestamp_addition >= TO_TIMESTAMP(_ds, 'YYYY-MM-DD HH24:MI:SS') + AND timestamp_addition < TO_TIMESTAMP(_df, 'YYYY-MM-DD HH24:MI:SS') +GROUP BY + s3billing.bucket_info.name + ,s3billing.placement.name + ,s3billing.bucket_stat.bucket_id + ,s2.get + ,s2.put + ,s2.bytes_sent +ORDER BY + s3billing.placement.name +,s3billing.bucket_info.name +; +END; +$$; + + +ALTER FUNCTION s3billing.billing_varchar(_ds character varying, _df character varying, _user character varying) OWNER TO dsorokin; + +-- +-- TOC entry 258 (class 1255 OID 5083308) +-- Name: buckets_current_stat(character varying); Type: FUNCTION; Schema: s3billing; Owner: dsorokin +-- + +CREATE FUNCTION s3billing.buckets_current_stat(_user character varying) RETURNS TABLE(name character varying, placement character varying, bucket_quota_enabled boolean, bucket_quota_max_size bigint, bucket_quota_max_objects bigint, usage_rgw_main_size_actual bigint, usage_rgw_main_num_objects bigint) + LANGUAGE plpgsql + AS $$ +BEGIN +RETURN QUERY +select + s3billing.bucket_info.name + ,(case + when ( s3billing.placement.name = 'default-placement') then 'HOT' + WHEN ( not s3billing.placement.name = 'default-placement' ) THEN s3billing.placement.name + end + ) as placement + ,s3billing.bucket_stat.bucket_quota_enabled + ,s3billing.bucket_stat.bucket_quota_max_size + ,s3billing.bucket_stat.bucket_quota_max_objects + ,s3billing.bucket_stat.usage_rgw_main_size_actual + ,s3billing.bucket_stat.usage_rgw_main_num_objects + from s3billing.bucket_stat + inner join s3billing.bucket_info on s3billing.bucket_stat.bucket_id= s3billing.bucket_info.id + inner join s3billing.placement on s3billing.bucket_info.placement_id = s3billing.placement.id + where owner=_user + and s3billing.bucket_stat.timestamp_addition=( + select max(s3billing.bucket_stat.timestamp_addition) from s3billing.bucket_stat + ) + order by s3billing.bucket_info.name, s3billing.bucket_stat.timestamp_addition +; +END; +$$; + + +ALTER FUNCTION s3billing.buckets_current_stat(_user character varying) OWNER TO dsorokin; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- TOC entry 222 (class 1259 OID 1893983) +-- Name: capacity_resource; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE TABLE ngcloud_ru.capacity_resource ( + vdc_id uuid NOT NULL, + "timestamp" timestamp with time zone NOT NULL, + cpu_allocated integer NOT NULL, + cpu_limit integer NOT NULL, + cpu_reserved integer NOT NULL, + cpu_used integer NOT NULL, + cpu_speed integer NOT NULL, + mem_allocated integer NOT NULL, + mem_limit integer NOT NULL, + mem_reserved integer NOT NULL, + mem_used integer NOT NULL +); + + +ALTER TABLE ngcloud_ru.capacity_resource OWNER TO vc_billing; + +-- +-- TOC entry 223 (class 1259 OID 1893993) +-- Name: capacity_storage; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE TABLE ngcloud_ru.capacity_storage ( + vdc_id uuid NOT NULL, + storage_profile_types_id integer NOT NULL, + "timestamp" timestamp with time zone NOT NULL, + id uuid NOT NULL, + "limit" integer NOT NULL, + used integer NOT NULL +); + + +ALTER TABLE ngcloud_ru.capacity_storage OWNER TO vc_billing; + +-- +-- TOC entry 220 (class 1259 OID 1893965) +-- Name: storage_profile_types; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE TABLE ngcloud_ru.storage_profile_types ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + + +ALTER TABLE ngcloud_ru.storage_profile_types OWNER TO vc_billing; + +-- +-- TOC entry 219 (class 1259 OID 1893964) +-- Name: storage_profile_types_id_seq; Type: SEQUENCE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE SEQUENCE ngcloud_ru.storage_profile_types_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE ngcloud_ru.storage_profile_types_id_seq OWNER TO vc_billing; + +-- +-- TOC entry 3486 (class 0 OID 0) +-- Dependencies: 219 +-- Name: storage_profile_types_id_seq; Type: SEQUENCE OWNED BY; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER SEQUENCE ngcloud_ru.storage_profile_types_id_seq OWNED BY ngcloud_ru.storage_profile_types.id; + + +-- +-- TOC entry 218 (class 1259 OID 1893959) +-- Name: tenant; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE TABLE ngcloud_ru.tenant ( + id uuid NOT NULL, + name character varying(255) NOT NULL, + wzcode bigint +); + + +ALTER TABLE ngcloud_ru.tenant OWNER TO vc_billing; + +-- +-- TOC entry 221 (class 1259 OID 1893973) +-- Name: vdc; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE TABLE ngcloud_ru.vdc ( + id uuid NOT NULL, + tenant_id uuid NOT NULL, + name character varying(255) NOT NULL +); + + +ALTER TABLE ngcloud_ru.vdc OWNER TO vc_billing; + +-- +-- TOC entry 230 (class 1259 OID 2160668) +-- Name: bucket_info; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.bucket_info ( + id integer NOT NULL, + bucket_id character varying(255) NOT NULL, + name character varying(255) NOT NULL, + marker character varying(255) NOT NULL, + placement_id bigint DEFAULT 0 NOT NULL +); + + +ALTER TABLE s3billing.bucket_info OWNER TO s3billing; + +-- +-- TOC entry 229 (class 1259 OID 2160667) +-- Name: bucket_info_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.bucket_info_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.bucket_info_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3490 (class 0 OID 0) +-- Dependencies: 229 +-- Name: bucket_info_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.bucket_info_id_seq OWNED BY s3billing.bucket_info.id; + + +-- +-- TOC entry 226 (class 1259 OID 2160642) +-- Name: bucket_stat; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.bucket_stat ( + bucket_id bigint, + num_shards bigint NOT NULL, + tenant character varying(255) DEFAULT NULL::character varying, + zone_group bigint NOT NULL, + placement_id bigint NOT NULL, + explicit_placement_data_pool character varying(255) DEFAULT NULL::character varying, + explicit_placement_data_extra_pool character varying(255) DEFAULT NULL::character varying, + explicit_placement_index_pool character varying(255) DEFAULT NULL::character varying, + index_type_id bigint NOT NULL, + versioned boolean DEFAULT false, + versioning_enabled boolean DEFAULT false, + object_lock_enabled boolean DEFAULT false, + mfa_enabled boolean DEFAULT false, + owner character varying(255) NOT NULL, + bucket_quota_enabled boolean DEFAULT false, + bucket_quota_check_on_raw boolean DEFAULT false, + bucket_quota_max_size bigint NOT NULL, + bucket_quota_max_size_kb bigint NOT NULL, + bucket_quota_max_objects bigint NOT NULL, + usage_rgw_main_size bigint NOT NULL, + usage_rgw_main_size_actual bigint NOT NULL, + usage_rgw_main_size_utilized bigint NOT NULL, + usage_rgw_main_size_kb bigint NOT NULL, + usage_rgw_main_size_kb_actual bigint NOT NULL, + usage_rgw_main_size_kb_utilized bigint NOT NULL, + usage_rgw_main_num_objects bigint NOT NULL, + usage_rgw_multimeta_size bigint, + usage_rgw_multimeta_size_actual bigint, + usage_rgw_multimeta_size_utilized bigint, + usage_rgw_multimeta_size_kb bigint, + usage_rgw_multimeta_size_kb_actual bigint, + usage_rgw_multimeta_size_kb_utilized bigint, + usage_rgw_multimeta_num_objects bigint, + creation_time timestamp without time zone NOT NULL, + mtime timestamp without time zone NOT NULL, + timestamp_addition timestamp without time zone DEFAULT date_trunc('hour'::text, CURRENT_TIMESTAMP) +); + + +ALTER TABLE s3billing.bucket_stat OWNER TO s3billing; + +-- +-- TOC entry 245 (class 1259 OID 2160763) +-- Name: category; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.category ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + + +ALTER TABLE s3billing.category OWNER TO s3billing; + +-- +-- TOC entry 244 (class 1259 OID 2160762) +-- Name: category_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.category_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.category_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3493 (class 0 OID 0) +-- Dependencies: 244 +-- Name: category_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.category_id_seq OWNED BY s3billing.category.id; + + +-- +-- TOC entry 225 (class 1259 OID 2160635) +-- Name: goose_db_version; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.goose_db_version ( + id integer NOT NULL, + version_id bigint NOT NULL, + is_applied boolean NOT NULL, + tstamp timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE s3billing.goose_db_version OWNER TO s3billing; + +-- +-- TOC entry 224 (class 1259 OID 2160634) +-- Name: goose_db_version_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE s3billing.goose_db_version ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME s3billing.goose_db_version_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- TOC entry 234 (class 1259 OID 2160684) +-- Name: index_type; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.index_type ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + + +ALTER TABLE s3billing.index_type OWNER TO s3billing; + +-- +-- TOC entry 233 (class 1259 OID 2160683) +-- Name: index_type_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.index_type_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.index_type_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3496 (class 0 OID 0) +-- Dependencies: 233 +-- Name: index_type_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.index_type_id_seq OWNED BY s3billing.index_type.id; + + +-- +-- TOC entry 232 (class 1259 OID 2160677) +-- Name: placement; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.placement ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + + +ALTER TABLE s3billing.placement OWNER TO s3billing; + +-- +-- TOC entry 231 (class 1259 OID 2160676) +-- Name: placement_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.placement_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.placement_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3498 (class 0 OID 0) +-- Dependencies: 231 +-- Name: placement_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.placement_id_seq OWNED BY s3billing.placement.id; + + +-- +-- TOC entry 239 (class 1259 OID 2160705) +-- Name: usage_bucket_by_user; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.usage_bucket_by_user ( + bucketid bigint, + "time" timestamp without time zone NOT NULL, + bytes_sent bigint NOT NULL, + bytes_received bigint NOT NULL, + ops bigint NOT NULL, + successful_ops bigint NOT NULL, + date_start timestamp without time zone NOT NULL, + date_end timestamp without time zone NOT NULL, + user_id bigint NOT NULL, + category_id bigint NOT NULL +); + + +ALTER TABLE s3billing.usage_bucket_by_user OWNER TO s3billing; + +-- +-- TOC entry 238 (class 1259 OID 2160698) +-- Name: usage_stat_summary; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.usage_stat_summary ( + id integer NOT NULL, + userid character varying(255) NOT NULL, + category character varying(255) NOT NULL, + bytes_sent bigint NOT NULL, + bytes_received bigint NOT NULL, + ops bigint NOT NULL, + successful_ops bigint NOT NULL, + date_start timestamp without time zone NOT NULL, + date_end timestamp without time zone NOT NULL +); + + +ALTER TABLE s3billing.usage_stat_summary OWNER TO s3billing; + +-- +-- TOC entry 237 (class 1259 OID 2160697) +-- Name: usage_stat_summary_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.usage_stat_summary_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.usage_stat_summary_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3501 (class 0 OID 0) +-- Dependencies: 237 +-- Name: usage_stat_summary_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.usage_stat_summary_id_seq OWNED BY s3billing.usage_stat_summary.id; + + +-- +-- TOC entry 236 (class 1259 OID 2160691) +-- Name: usage_stat_total; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.usage_stat_total ( + id integer NOT NULL, + userid character varying(255) NOT NULL, + bytes_sent bigint NOT NULL, + bytes_received bigint NOT NULL, + ops bigint NOT NULL, + successful_ops bigint NOT NULL, + date_start timestamp without time zone NOT NULL, + date_end timestamp without time zone NOT NULL +); + + +ALTER TABLE s3billing.usage_stat_total OWNER TO s3billing; + +-- +-- TOC entry 235 (class 1259 OID 2160690) +-- Name: usage_stat_total_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.usage_stat_total_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.usage_stat_total_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3503 (class 0 OID 0) +-- Dependencies: 235 +-- Name: usage_stat_total_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.usage_stat_total_id_seq OWNED BY s3billing.usage_stat_total.id; + + +-- +-- TOC entry 243 (class 1259 OID 2160751) +-- Name: user_info; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.user_info ( + id integer NOT NULL, + name character varying(255) NOT NULL, + owner character varying(255) NOT NULL +); + + +ALTER TABLE s3billing.user_info OWNER TO s3billing; + +-- +-- TOC entry 242 (class 1259 OID 2160750) +-- Name: user_info_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.user_info_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.user_info_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3505 (class 0 OID 0) +-- Dependencies: 242 +-- Name: user_info_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.user_info_id_seq OWNED BY s3billing.user_info.id; + + +-- +-- TOC entry 241 (class 1259 OID 2160712) +-- Name: user_quota_bucket; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.user_quota_bucket ( + id integer NOT NULL, + userid character varying(255) NOT NULL, + enabled boolean DEFAULT false, + check_on_raw boolean DEFAULT false, + max_size bigint NOT NULL, + max_size_kb bigint NOT NULL, + max_objects bigint NOT NULL +); + + +ALTER TABLE s3billing.user_quota_bucket OWNER TO s3billing; + +-- +-- TOC entry 240 (class 1259 OID 2160711) +-- Name: user_quota_bucket_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.user_quota_bucket_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.user_quota_bucket_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3507 (class 0 OID 0) +-- Dependencies: 240 +-- Name: user_quota_bucket_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.user_quota_bucket_id_seq OWNED BY s3billing.user_quota_bucket.id; + + +-- +-- TOC entry 228 (class 1259 OID 2160661) +-- Name: zone_group; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.zone_group ( + id integer NOT NULL, + name uuid NOT NULL +); + + +ALTER TABLE s3billing.zone_group OWNER TO s3billing; + +-- +-- TOC entry 227 (class 1259 OID 2160660) +-- Name: zone_group_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.zone_group_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.zone_group_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3509 (class 0 OID 0) +-- Dependencies: 227 +-- Name: zone_group_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.zone_group_id_seq OWNED BY s3billing.zone_group.id; + + +-- +-- TOC entry 3262 (class 2604 OID 1893968) +-- Name: storage_profile_types id; Type: DEFAULT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.storage_profile_types ALTER COLUMN id SET DEFAULT nextval('ngcloud_ru.storage_profile_types_id_seq'::regclass); + + +-- +-- TOC entry 3276 (class 2604 OID 2160671) +-- Name: bucket_info id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.bucket_info ALTER COLUMN id SET DEFAULT nextval('s3billing.bucket_info_id_seq'::regclass); + + +-- +-- TOC entry 3286 (class 2604 OID 2160766) +-- Name: category id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.category ALTER COLUMN id SET DEFAULT nextval('s3billing.category_id_seq'::regclass); + + +-- +-- TOC entry 3279 (class 2604 OID 2160687) +-- Name: index_type id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.index_type ALTER COLUMN id SET DEFAULT nextval('s3billing.index_type_id_seq'::regclass); + + +-- +-- TOC entry 3278 (class 2604 OID 2160680) +-- Name: placement id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.placement ALTER COLUMN id SET DEFAULT nextval('s3billing.placement_id_seq'::regclass); + + +-- +-- TOC entry 3281 (class 2604 OID 2160701) +-- Name: usage_stat_summary id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_stat_summary ALTER COLUMN id SET DEFAULT nextval('s3billing.usage_stat_summary_id_seq'::regclass); + + +-- +-- TOC entry 3280 (class 2604 OID 2160694) +-- Name: usage_stat_total id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_stat_total ALTER COLUMN id SET DEFAULT nextval('s3billing.usage_stat_total_id_seq'::regclass); + + +-- +-- TOC entry 3285 (class 2604 OID 2160754) +-- Name: user_info id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.user_info ALTER COLUMN id SET DEFAULT nextval('s3billing.user_info_id_seq'::regclass); + + +-- +-- TOC entry 3282 (class 2604 OID 2160715) +-- Name: user_quota_bucket id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.user_quota_bucket ALTER COLUMN id SET DEFAULT nextval('s3billing.user_quota_bucket_id_seq'::regclass); + + +-- +-- TOC entry 3275 (class 2604 OID 2160664) +-- Name: zone_group id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.zone_group ALTER COLUMN id SET DEFAULT nextval('s3billing.zone_group_id_seq'::regclass); + + +-- +-- TOC entry 3296 (class 2606 OID 1893987) +-- Name: capacity_resource capacity_resource_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_resource + ADD CONSTRAINT capacity_resource_pkey PRIMARY KEY (vdc_id, "timestamp"); + + +-- +-- TOC entry 3298 (class 2606 OID 1893997) +-- Name: capacity_storage capacity_storage_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_storage + ADD CONSTRAINT capacity_storage_pkey PRIMARY KEY (vdc_id, id, "timestamp"); + + +-- +-- TOC entry 3290 (class 2606 OID 1893972) +-- Name: storage_profile_types storage_profile_types_name_key; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.storage_profile_types + ADD CONSTRAINT storage_profile_types_name_key UNIQUE (name); + + +-- +-- TOC entry 3292 (class 2606 OID 1893970) +-- Name: storage_profile_types storage_profile_types_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.storage_profile_types + ADD CONSTRAINT storage_profile_types_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3288 (class 2606 OID 1893963) +-- Name: tenant tenant_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.tenant + ADD CONSTRAINT tenant_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3294 (class 2606 OID 1893977) +-- Name: vdc vdc_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.vdc + ADD CONSTRAINT vdc_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3308 (class 2606 OID 2160675) +-- Name: bucket_info bucket_info_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.bucket_info + ADD CONSTRAINT bucket_info_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3303 (class 2606 OID 2476484) +-- Name: bucket_stat bucket_stat_unique; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.bucket_stat + ADD CONSTRAINT bucket_stat_unique UNIQUE (bucket_id, placement_id, timestamp_addition); + + +-- +-- TOC entry 3328 (class 2606 OID 2160768) +-- Name: category category_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.category + ADD CONSTRAINT category_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3300 (class 2606 OID 2160640) +-- Name: goose_db_version goose_db_version_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.goose_db_version + ADD CONSTRAINT goose_db_version_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3314 (class 2606 OID 2160689) +-- Name: index_type index_type_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.index_type + ADD CONSTRAINT index_type_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3312 (class 2606 OID 2160682) +-- Name: placement placement_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.placement + ADD CONSTRAINT placement_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3320 (class 2606 OID 2476705) +-- Name: usage_bucket_by_user usage_bucket_by_user_unique; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_bucket_by_user + ADD CONSTRAINT usage_bucket_by_user_unique UNIQUE (bucketid, date_start, date_end, user_id, category_id); + + +-- +-- TOC entry 3318 (class 2606 OID 2160703) +-- Name: usage_stat_summary usage_stat_summary_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_stat_summary + ADD CONSTRAINT usage_stat_summary_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3316 (class 2606 OID 2160696) +-- Name: usage_stat_total usage_stat_total_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_stat_total + ADD CONSTRAINT usage_stat_total_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3325 (class 2606 OID 2160758) +-- Name: user_info user_info_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.user_info + ADD CONSTRAINT user_info_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3322 (class 2606 OID 2160719) +-- Name: user_quota_bucket user_quota_bucket_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.user_quota_bucket + ADD CONSTRAINT user_quota_bucket_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3305 (class 2606 OID 2160666) +-- Name: zone_group zone_group_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.zone_group + ADD CONSTRAINT zone_group_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3306 (class 1259 OID 2474077) +-- Name: bucket_info_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX bucket_info_name_idx ON s3billing.bucket_info USING btree (name); + + +-- +-- TOC entry 3309 (class 1259 OID 2474078) +-- Name: bucket_info_placement_id_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX bucket_info_placement_id_idx ON s3billing.bucket_info USING btree (placement_id); + + +-- +-- TOC entry 3301 (class 1259 OID 2474094) +-- Name: bucket_stat_owner_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX bucket_stat_owner_idx ON s3billing.bucket_stat USING btree (owner); + + +-- +-- TOC entry 3326 (class 1259 OID 2474445) +-- Name: category_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE UNIQUE INDEX category_name_idx ON s3billing.category USING btree (name); + + +-- +-- TOC entry 3310 (class 1259 OID 2474468) +-- Name: placement_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE UNIQUE INDEX placement_name_idx ON s3billing.placement USING btree (name); + + +-- +-- TOC entry 3323 (class 1259 OID 2474438) +-- Name: user_info_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX user_info_name_idx ON s3billing.user_info USING btree (name); + + +-- +-- TOC entry 3330 (class 2606 OID 1893988) +-- Name: capacity_resource capacity_resource_vdc_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_resource + ADD CONSTRAINT capacity_resource_vdc_id_fkey FOREIGN KEY (vdc_id) REFERENCES ngcloud_ru.vdc(id) ON DELETE CASCADE; + + +-- +-- TOC entry 3331 (class 2606 OID 1894003) +-- Name: capacity_storage capacity_storage_storage_profile_types_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_storage + ADD CONSTRAINT capacity_storage_storage_profile_types_id_fkey FOREIGN KEY (storage_profile_types_id) REFERENCES ngcloud_ru.storage_profile_types(id); + + +-- +-- TOC entry 3332 (class 2606 OID 1893998) +-- Name: capacity_storage capacity_storage_vdc_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_storage + ADD CONSTRAINT capacity_storage_vdc_id_fkey FOREIGN KEY (vdc_id) REFERENCES ngcloud_ru.vdc(id) ON DELETE CASCADE; + + +-- +-- TOC entry 3329 (class 2606 OID 1893978) +-- Name: vdc vdc_tenant_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.vdc + ADD CONSTRAINT vdc_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES ngcloud_ru.tenant(id); + + +-- +-- TOC entry 3481 (class 0 OID 0) +-- Dependencies: 7 +-- Name: SCHEMA ngcloud_ru; Type: ACL; Schema: -; Owner: vc_billing +-- + +GRANT USAGE ON SCHEMA ngcloud_ru TO grafanabilling; + + +-- +-- TOC entry 3482 (class 0 OID 0) +-- Dependencies: 8 +-- Name: SCHEMA s3billing; Type: ACL; Schema: -; Owner: s3billing +-- + +GRANT USAGE ON SCHEMA s3billing TO grafanabilling; + + +-- +-- TOC entry 3483 (class 0 OID 0) +-- Dependencies: 222 +-- Name: TABLE capacity_resource; Type: ACL; Schema: ngcloud_ru; Owner: vc_billing +-- + +GRANT SELECT ON TABLE ngcloud_ru.capacity_resource TO grafanabilling; + + +-- +-- TOC entry 3484 (class 0 OID 0) +-- Dependencies: 223 +-- Name: TABLE capacity_storage; Type: ACL; Schema: ngcloud_ru; Owner: vc_billing +-- + +GRANT SELECT ON TABLE ngcloud_ru.capacity_storage TO grafanabilling; + + +-- +-- TOC entry 3485 (class 0 OID 0) +-- Dependencies: 220 +-- Name: TABLE storage_profile_types; Type: ACL; Schema: ngcloud_ru; Owner: vc_billing +-- + +GRANT SELECT ON TABLE ngcloud_ru.storage_profile_types TO grafanabilling; + + +-- +-- TOC entry 3487 (class 0 OID 0) +-- Dependencies: 218 +-- Name: TABLE tenant; Type: ACL; Schema: ngcloud_ru; Owner: vc_billing +-- + +GRANT SELECT ON TABLE ngcloud_ru.tenant TO grafanabilling; + + +-- +-- TOC entry 3488 (class 0 OID 0) +-- Dependencies: 221 +-- Name: TABLE vdc; Type: ACL; Schema: ngcloud_ru; Owner: vc_billing +-- + +GRANT SELECT ON TABLE ngcloud_ru.vdc TO grafanabilling; + + +-- +-- TOC entry 3489 (class 0 OID 0) +-- Dependencies: 230 +-- Name: TABLE bucket_info; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.bucket_info TO grafanabilling; + + +-- +-- TOC entry 3491 (class 0 OID 0) +-- Dependencies: 226 +-- Name: TABLE bucket_stat; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.bucket_stat TO grafanabilling; + + +-- +-- TOC entry 3492 (class 0 OID 0) +-- Dependencies: 245 +-- Name: TABLE category; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.category TO grafanabilling; + + +-- +-- TOC entry 3494 (class 0 OID 0) +-- Dependencies: 225 +-- Name: TABLE goose_db_version; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.goose_db_version TO grafanabilling; + + +-- +-- TOC entry 3495 (class 0 OID 0) +-- Dependencies: 234 +-- Name: TABLE index_type; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.index_type TO grafanabilling; + + +-- +-- TOC entry 3497 (class 0 OID 0) +-- Dependencies: 232 +-- Name: TABLE placement; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.placement TO grafanabilling; + + +-- +-- TOC entry 3499 (class 0 OID 0) +-- Dependencies: 239 +-- Name: TABLE usage_bucket_by_user; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.usage_bucket_by_user TO grafanabilling; + + +-- +-- TOC entry 3500 (class 0 OID 0) +-- Dependencies: 238 +-- Name: TABLE usage_stat_summary; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.usage_stat_summary TO grafanabilling; + + +-- +-- TOC entry 3502 (class 0 OID 0) +-- Dependencies: 236 +-- Name: TABLE usage_stat_total; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.usage_stat_total TO grafanabilling; + + +-- +-- TOC entry 3504 (class 0 OID 0) +-- Dependencies: 243 +-- Name: TABLE user_info; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.user_info TO grafanabilling; + + +-- +-- TOC entry 3506 (class 0 OID 0) +-- Dependencies: 241 +-- Name: TABLE user_quota_bucket; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.user_quota_bucket TO grafanabilling; + + +-- +-- TOC entry 3508 (class 0 OID 0) +-- Dependencies: 228 +-- Name: TABLE zone_group; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.zone_group TO grafanabilling; + + +-- Completed on 2025-10-24 14:30:47 + +-- +-- PostgreSQL database dump complete +-- + +\unrestrict M18FnaokuZFKQZjWu9az6dzOO6o2cSlpJgAocs2PXfRbmzHVcXEXaiZZcaOPZko + diff --git a/etc/db/billing_schema_dev.sql b/etc/db/billing_schema_dev.sql new file mode 100644 index 0000000..3ac43c9 --- /dev/null +++ b/etc/db/billing_schema_dev.sql @@ -0,0 +1,72 @@ +set role postgres; +-- +CREATE SCHEMA IF NOT EXISTS gpu; +--ALTER SCHEMA gpu OWNER TO dbo; +GRANT USAGE ON SCHEMA gpu TO nifi; + +GRANT ALL ON ALL TABLES IN SCHEMA gpu TO nifi; +GRANT ALL ON ALL SEQUENCES IN SCHEMA gpu TO nifi; + +--ALTER DEFAULT PRIVILEGES IN SCHEMA gpu GRANT ALL ON TABLES TO nifi; +--ALTER DEFAULT PRIVILEGES IN SCHEMA gpu GRANT ALL ON SEQUENCES TO nifi; + +ALTER DEFAULT PRIVILEGES FOR ROLE dbo, postgres IN SCHEMA gpu GRANT ALL ON TABLES TO nifi; +ALTER DEFAULT PRIVILEGES FOR ROLE dbo, postgres IN SCHEMA gpu GRANT ALL ON SEQUENCES TO nifi; + +--SET ROLE dbo; + +DROP TABLE IF EXISTS gpu.vm; +CREATE TABLE gpu.vm ( + objUUID uuid NOT NULL PRIMARY KEY + ,groupUUID uuid NULL + ,objId varchar(255) NULL + ,ClientID varchar(255) NULL -- WZ + ,VCD varchar(255) NULL + ,Org varchar(255) NULL + ,OrgVDC varchar(255) NULL + ,vCenter varchar(255) NULL + ,GPU varchar(255) NULL + ,dt_load timestamptz NOT NULL +); +ALTER TABLE gpu.vm OWNER TO dbo; +/* +{ +"type": "record", +"name": "gpu.vm", +"namespace": "org.apache.nifi", +"fields": [ + {"name":"objUUID", "type":{"type": "string", "logicalType": "uuid"}}, + {"name":"groupUUID", "type":[{"type": "string", "logicalType": "uuid"} ,"null"]}, + {"name":"objId", "type":["string" ,"null"]}, + {"name":"ClientID", "type":["int" ,"null"]}, + {"name":"VCD", "type":["string" ,"null"]}, + {"name":"Org", "type":["string" ,"null"]}, + {"name":"OrgVDC", "type":["string" ,"null"]}, + {"name":"vCenter", "type":["string" ,"null"]}, + {"name":"GPU", "type":["string" ,"null"]}, + {"name":"VCD", "type":["string" ,"null"]}, + {"name":"dt_load","type":{"type": "long", "logicalType": "local-timestamp-millis"}} +] +} +*/ + +DROP TABLE IF EXISTS gpu.vm_power_state; +CREATE TABLE gpu.vm_power_state ( + objId varchar(255) NULL + ,ts timestamptz NOT NULL -- без таймштампа загрузки + ,value int NULL + ,CONSTRAINT PK_vm_power_state PRIMARY KEY(objId, ts) +); +ALTER TABLE gpu.vm_power_state OWNER TO dbo; +/* +{ +"type": "record", +"name": "gpu.vm_power_state, +"namespace": "org.apache.nifi", +"fields": [ + {"name":"objId", "type":["string" ,"null"]}, + {"name":"ts","type":{"type": "long", "logicalType": "local-timestamp-millis"}}, + {"name":"value", "type":["int" ,"null"]} +] +} +*/ \ No newline at end of file diff --git a/etc/db/billing_schema_s3.sql b/etc/db/billing_schema_s3.sql new file mode 100644 index 0000000..6382912 --- /dev/null +++ b/etc/db/billing_schema_s3.sql @@ -0,0 +1,828 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 16.0 +-- Dumped by pg_dump version 16.4 + +-- Started on 2025-09-15 09:50:58 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- TOC entry 230 (class 1259 OID 2160668) +-- Name: bucket_info; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.bucket_info ( + id integer NOT NULL, + bucket_id character varying(255) NOT NULL, + name character varying(255) NOT NULL, + marker character varying(255) NOT NULL, + placement_id bigint DEFAULT 0 NOT NULL +); + + +ALTER TABLE s3billing.bucket_info OWNER TO s3billing; + +-- +-- TOC entry 229 (class 1259 OID 2160667) +-- Name: bucket_info_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.bucket_info_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.bucket_info_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3448 (class 0 OID 0) +-- Dependencies: 229 +-- Name: bucket_info_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.bucket_info_id_seq OWNED BY s3billing.bucket_info.id; + + +-- +-- TOC entry 226 (class 1259 OID 2160642) +-- Name: bucket_stat; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.bucket_stat ( + bucket_id bigint, + num_shards bigint NOT NULL, + tenant character varying(255) DEFAULT NULL::character varying, + zone_group bigint NOT NULL, + placement_id bigint NOT NULL, + explicit_placement_data_pool character varying(255) DEFAULT NULL::character varying, + explicit_placement_data_extra_pool character varying(255) DEFAULT NULL::character varying, + explicit_placement_index_pool character varying(255) DEFAULT NULL::character varying, + index_type_id bigint NOT NULL, + versioned boolean DEFAULT false, + versioning_enabled boolean DEFAULT false, + object_lock_enabled boolean DEFAULT false, + mfa_enabled boolean DEFAULT false, + owner character varying(255) NOT NULL, + bucket_quota_enabled boolean DEFAULT false, + bucket_quota_check_on_raw boolean DEFAULT false, + bucket_quota_max_size bigint NOT NULL, + bucket_quota_max_size_kb bigint NOT NULL, + bucket_quota_max_objects bigint NOT NULL, + usage_rgw_main_size bigint NOT NULL, + usage_rgw_main_size_actual bigint NOT NULL, + usage_rgw_main_size_utilized bigint NOT NULL, + usage_rgw_main_size_kb bigint NOT NULL, + usage_rgw_main_size_kb_actual bigint NOT NULL, + usage_rgw_main_size_kb_utilized bigint NOT NULL, + usage_rgw_main_num_objects bigint NOT NULL, + usage_rgw_multimeta_size bigint, + usage_rgw_multimeta_size_actual bigint, + usage_rgw_multimeta_size_utilized bigint, + usage_rgw_multimeta_size_kb bigint, + usage_rgw_multimeta_size_kb_actual bigint, + usage_rgw_multimeta_size_kb_utilized bigint, + usage_rgw_multimeta_num_objects bigint, + creation_time timestamp without time zone NOT NULL, + mtime timestamp without time zone NOT NULL, + timestamp_addition timestamp without time zone DEFAULT date_trunc('hour'::text, CURRENT_TIMESTAMP) +); + + +ALTER TABLE s3billing.bucket_stat OWNER TO s3billing; + +-- +-- TOC entry 245 (class 1259 OID 2160763) +-- Name: category; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.category ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + + +ALTER TABLE s3billing.category OWNER TO s3billing; + +-- +-- TOC entry 244 (class 1259 OID 2160762) +-- Name: category_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.category_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.category_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3451 (class 0 OID 0) +-- Dependencies: 244 +-- Name: category_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.category_id_seq OWNED BY s3billing.category.id; + + +-- +-- TOC entry 225 (class 1259 OID 2160635) +-- Name: goose_db_version; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.goose_db_version ( + id integer NOT NULL, + version_id bigint NOT NULL, + is_applied boolean NOT NULL, + tstamp timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE s3billing.goose_db_version OWNER TO s3billing; + +-- +-- TOC entry 224 (class 1259 OID 2160634) +-- Name: goose_db_version_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE s3billing.goose_db_version ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME s3billing.goose_db_version_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- TOC entry 234 (class 1259 OID 2160684) +-- Name: index_type; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.index_type ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + + +ALTER TABLE s3billing.index_type OWNER TO s3billing; + +-- +-- TOC entry 233 (class 1259 OID 2160683) +-- Name: index_type_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.index_type_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.index_type_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3454 (class 0 OID 0) +-- Dependencies: 233 +-- Name: index_type_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.index_type_id_seq OWNED BY s3billing.index_type.id; + + +-- +-- TOC entry 232 (class 1259 OID 2160677) +-- Name: placement; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.placement ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + + +ALTER TABLE s3billing.placement OWNER TO s3billing; + +-- +-- TOC entry 231 (class 1259 OID 2160676) +-- Name: placement_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.placement_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.placement_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3456 (class 0 OID 0) +-- Dependencies: 231 +-- Name: placement_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.placement_id_seq OWNED BY s3billing.placement.id; + + +-- +-- TOC entry 239 (class 1259 OID 2160705) +-- Name: usage_bucket_by_user; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.usage_bucket_by_user ( + bucketid bigint, + "time" timestamp without time zone NOT NULL, + bytes_sent bigint NOT NULL, + bytes_received bigint NOT NULL, + ops bigint NOT NULL, + successful_ops bigint NOT NULL, + date_start timestamp without time zone NOT NULL, + date_end timestamp without time zone NOT NULL, + user_id bigint NOT NULL, + category_id bigint NOT NULL +); + + +ALTER TABLE s3billing.usage_bucket_by_user OWNER TO s3billing; + +-- +-- TOC entry 238 (class 1259 OID 2160698) +-- Name: usage_stat_summary; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.usage_stat_summary ( + id integer NOT NULL, + userid character varying(255) NOT NULL, + category character varying(255) NOT NULL, + bytes_sent bigint NOT NULL, + bytes_received bigint NOT NULL, + ops bigint NOT NULL, + successful_ops bigint NOT NULL, + date_start timestamp without time zone NOT NULL, + date_end timestamp without time zone NOT NULL +); + + +ALTER TABLE s3billing.usage_stat_summary OWNER TO s3billing; + +-- +-- TOC entry 237 (class 1259 OID 2160697) +-- Name: usage_stat_summary_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.usage_stat_summary_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.usage_stat_summary_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3459 (class 0 OID 0) +-- Dependencies: 237 +-- Name: usage_stat_summary_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.usage_stat_summary_id_seq OWNED BY s3billing.usage_stat_summary.id; + + +-- +-- TOC entry 236 (class 1259 OID 2160691) +-- Name: usage_stat_total; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.usage_stat_total ( + id integer NOT NULL, + userid character varying(255) NOT NULL, + bytes_sent bigint NOT NULL, + bytes_received bigint NOT NULL, + ops bigint NOT NULL, + successful_ops bigint NOT NULL, + date_start timestamp without time zone NOT NULL, + date_end timestamp without time zone NOT NULL +); + + +ALTER TABLE s3billing.usage_stat_total OWNER TO s3billing; + +-- +-- TOC entry 235 (class 1259 OID 2160690) +-- Name: usage_stat_total_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.usage_stat_total_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.usage_stat_total_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3461 (class 0 OID 0) +-- Dependencies: 235 +-- Name: usage_stat_total_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.usage_stat_total_id_seq OWNED BY s3billing.usage_stat_total.id; + + +-- +-- TOC entry 243 (class 1259 OID 2160751) +-- Name: user_info; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.user_info ( + id integer NOT NULL, + name character varying(255) NOT NULL, + owner character varying(255) NOT NULL +); + + +ALTER TABLE s3billing.user_info OWNER TO s3billing; + +-- +-- TOC entry 242 (class 1259 OID 2160750) +-- Name: user_info_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.user_info_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.user_info_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3463 (class 0 OID 0) +-- Dependencies: 242 +-- Name: user_info_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.user_info_id_seq OWNED BY s3billing.user_info.id; + + +-- +-- TOC entry 241 (class 1259 OID 2160712) +-- Name: user_quota_bucket; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.user_quota_bucket ( + id integer NOT NULL, + userid character varying(255) NOT NULL, + enabled boolean DEFAULT false, + check_on_raw boolean DEFAULT false, + max_size bigint NOT NULL, + max_size_kb bigint NOT NULL, + max_objects bigint NOT NULL +); + + +ALTER TABLE s3billing.user_quota_bucket OWNER TO s3billing; + +-- +-- TOC entry 240 (class 1259 OID 2160711) +-- Name: user_quota_bucket_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.user_quota_bucket_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.user_quota_bucket_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3465 (class 0 OID 0) +-- Dependencies: 240 +-- Name: user_quota_bucket_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.user_quota_bucket_id_seq OWNED BY s3billing.user_quota_bucket.id; + + +-- +-- TOC entry 228 (class 1259 OID 2160661) +-- Name: zone_group; Type: TABLE; Schema: s3billing; Owner: s3billing +-- + +CREATE TABLE s3billing.zone_group ( + id integer NOT NULL, + name uuid NOT NULL +); + + +ALTER TABLE s3billing.zone_group OWNER TO s3billing; + +-- +-- TOC entry 227 (class 1259 OID 2160660) +-- Name: zone_group_id_seq; Type: SEQUENCE; Schema: s3billing; Owner: s3billing +-- + +CREATE SEQUENCE s3billing.zone_group_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE s3billing.zone_group_id_seq OWNER TO s3billing; + +-- +-- TOC entry 3467 (class 0 OID 0) +-- Dependencies: 227 +-- Name: zone_group_id_seq; Type: SEQUENCE OWNED BY; Schema: s3billing; Owner: s3billing +-- + +ALTER SEQUENCE s3billing.zone_group_id_seq OWNED BY s3billing.zone_group.id; + + +-- +-- TOC entry 3258 (class 2604 OID 2160671) +-- Name: bucket_info id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.bucket_info ALTER COLUMN id SET DEFAULT nextval('s3billing.bucket_info_id_seq'::regclass); + + +-- +-- TOC entry 3268 (class 2604 OID 2160766) +-- Name: category id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.category ALTER COLUMN id SET DEFAULT nextval('s3billing.category_id_seq'::regclass); + + +-- +-- TOC entry 3261 (class 2604 OID 2160687) +-- Name: index_type id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.index_type ALTER COLUMN id SET DEFAULT nextval('s3billing.index_type_id_seq'::regclass); + + +-- +-- TOC entry 3260 (class 2604 OID 2160680) +-- Name: placement id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.placement ALTER COLUMN id SET DEFAULT nextval('s3billing.placement_id_seq'::regclass); + + +-- +-- TOC entry 3263 (class 2604 OID 2160701) +-- Name: usage_stat_summary id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_stat_summary ALTER COLUMN id SET DEFAULT nextval('s3billing.usage_stat_summary_id_seq'::regclass); + + +-- +-- TOC entry 3262 (class 2604 OID 2160694) +-- Name: usage_stat_total id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_stat_total ALTER COLUMN id SET DEFAULT nextval('s3billing.usage_stat_total_id_seq'::regclass); + + +-- +-- TOC entry 3267 (class 2604 OID 2160754) +-- Name: user_info id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.user_info ALTER COLUMN id SET DEFAULT nextval('s3billing.user_info_id_seq'::regclass); + + +-- +-- TOC entry 3264 (class 2604 OID 2160715) +-- Name: user_quota_bucket id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.user_quota_bucket ALTER COLUMN id SET DEFAULT nextval('s3billing.user_quota_bucket_id_seq'::regclass); + + +-- +-- TOC entry 3257 (class 2604 OID 2160664) +-- Name: zone_group id; Type: DEFAULT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.zone_group ALTER COLUMN id SET DEFAULT nextval('s3billing.zone_group_id_seq'::regclass); + + +-- +-- TOC entry 3278 (class 2606 OID 2160675) +-- Name: bucket_info bucket_info_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.bucket_info + ADD CONSTRAINT bucket_info_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3273 (class 2606 OID 2476484) +-- Name: bucket_stat bucket_stat_unique; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.bucket_stat + ADD CONSTRAINT bucket_stat_unique UNIQUE (bucket_id, placement_id, timestamp_addition); + + +-- +-- TOC entry 3298 (class 2606 OID 2160768) +-- Name: category category_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.category + ADD CONSTRAINT category_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3270 (class 2606 OID 2160640) +-- Name: goose_db_version goose_db_version_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.goose_db_version + ADD CONSTRAINT goose_db_version_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3284 (class 2606 OID 2160689) +-- Name: index_type index_type_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.index_type + ADD CONSTRAINT index_type_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3282 (class 2606 OID 2160682) +-- Name: placement placement_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.placement + ADD CONSTRAINT placement_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3290 (class 2606 OID 2476705) +-- Name: usage_bucket_by_user usage_bucket_by_user_unique; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_bucket_by_user + ADD CONSTRAINT usage_bucket_by_user_unique UNIQUE (bucketid, date_start, date_end, user_id, category_id); + + +-- +-- TOC entry 3288 (class 2606 OID 2160703) +-- Name: usage_stat_summary usage_stat_summary_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_stat_summary + ADD CONSTRAINT usage_stat_summary_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3286 (class 2606 OID 2160696) +-- Name: usage_stat_total usage_stat_total_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.usage_stat_total + ADD CONSTRAINT usage_stat_total_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3295 (class 2606 OID 2160758) +-- Name: user_info user_info_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.user_info + ADD CONSTRAINT user_info_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3292 (class 2606 OID 2160719) +-- Name: user_quota_bucket user_quota_bucket_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.user_quota_bucket + ADD CONSTRAINT user_quota_bucket_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3275 (class 2606 OID 2160666) +-- Name: zone_group zone_group_pkey; Type: CONSTRAINT; Schema: s3billing; Owner: s3billing +-- + +ALTER TABLE ONLY s3billing.zone_group + ADD CONSTRAINT zone_group_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3276 (class 1259 OID 2474077) +-- Name: bucket_info_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX bucket_info_name_idx ON s3billing.bucket_info USING btree (name); + + +-- +-- TOC entry 3279 (class 1259 OID 2474078) +-- Name: bucket_info_placement_id_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX bucket_info_placement_id_idx ON s3billing.bucket_info USING btree (placement_id); + + +-- +-- TOC entry 3271 (class 1259 OID 2474094) +-- Name: bucket_stat_owner_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX bucket_stat_owner_idx ON s3billing.bucket_stat USING btree (owner); + + +-- +-- TOC entry 3296 (class 1259 OID 2474445) +-- Name: category_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE UNIQUE INDEX category_name_idx ON s3billing.category USING btree (name); + + +-- +-- TOC entry 3280 (class 1259 OID 2474468) +-- Name: placement_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE UNIQUE INDEX placement_name_idx ON s3billing.placement USING btree (name); + + +-- +-- TOC entry 3293 (class 1259 OID 2474438) +-- Name: user_info_name_idx; Type: INDEX; Schema: s3billing; Owner: s3billing +-- + +CREATE INDEX user_info_name_idx ON s3billing.user_info USING btree (name); + + +-- +-- TOC entry 3447 (class 0 OID 0) +-- Dependencies: 230 +-- Name: TABLE bucket_info; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.bucket_info TO grafanabilling; + + +-- +-- TOC entry 3449 (class 0 OID 0) +-- Dependencies: 226 +-- Name: TABLE bucket_stat; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.bucket_stat TO grafanabilling; + + +-- +-- TOC entry 3450 (class 0 OID 0) +-- Dependencies: 245 +-- Name: TABLE category; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.category TO grafanabilling; + + +-- +-- TOC entry 3452 (class 0 OID 0) +-- Dependencies: 225 +-- Name: TABLE goose_db_version; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.goose_db_version TO grafanabilling; + + +-- +-- TOC entry 3453 (class 0 OID 0) +-- Dependencies: 234 +-- Name: TABLE index_type; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.index_type TO grafanabilling; + + +-- +-- TOC entry 3455 (class 0 OID 0) +-- Dependencies: 232 +-- Name: TABLE placement; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.placement TO grafanabilling; + + +-- +-- TOC entry 3457 (class 0 OID 0) +-- Dependencies: 239 +-- Name: TABLE usage_bucket_by_user; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.usage_bucket_by_user TO grafanabilling; + + +-- +-- TOC entry 3458 (class 0 OID 0) +-- Dependencies: 238 +-- Name: TABLE usage_stat_summary; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.usage_stat_summary TO grafanabilling; + + +-- +-- TOC entry 3460 (class 0 OID 0) +-- Dependencies: 236 +-- Name: TABLE usage_stat_total; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.usage_stat_total TO grafanabilling; + + +-- +-- TOC entry 3462 (class 0 OID 0) +-- Dependencies: 243 +-- Name: TABLE user_info; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.user_info TO grafanabilling; + + +-- +-- TOC entry 3464 (class 0 OID 0) +-- Dependencies: 241 +-- Name: TABLE user_quota_bucket; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.user_quota_bucket TO grafanabilling; + + +-- +-- TOC entry 3466 (class 0 OID 0) +-- Dependencies: 228 +-- Name: TABLE zone_group; Type: ACL; Schema: s3billing; Owner: s3billing +-- + +GRANT SELECT ON TABLE s3billing.zone_group TO grafanabilling; + + +-- Completed on 2025-09-15 09:50:59 + +-- +-- PostgreSQL database dump complete +-- + diff --git a/etc/db/billing_schema_vc.sql b/etc/db/billing_schema_vc.sql new file mode 100644 index 0000000..2e66787 --- /dev/null +++ b/etc/db/billing_schema_vc.sql @@ -0,0 +1,278 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 16.0 +-- Dumped by pg_dump version 16.4 + +-- Started on 2025-09-15 09:53:16 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- TOC entry 222 (class 1259 OID 1893983) +-- Name: capacity_resource; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE TABLE ngcloud_ru.capacity_resource ( + vdc_id uuid NOT NULL, + "timestamp" timestamp with time zone NOT NULL, + cpu_allocated integer NOT NULL, + cpu_limit integer NOT NULL, + cpu_reserved integer NOT NULL, + cpu_used integer NOT NULL, + cpu_speed integer NOT NULL, + mem_allocated integer NOT NULL, + mem_limit integer NOT NULL, + mem_reserved integer NOT NULL, + mem_used integer NOT NULL +); + + +ALTER TABLE ngcloud_ru.capacity_resource OWNER TO vc_billing; + +-- +-- TOC entry 223 (class 1259 OID 1893993) +-- Name: capacity_storage; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE TABLE ngcloud_ru.capacity_storage ( + vdc_id uuid NOT NULL, + storage_profile_types_id integer NOT NULL, + "timestamp" timestamp with time zone NOT NULL, + id uuid NOT NULL, + "limit" integer NOT NULL, + used integer NOT NULL +); + + +ALTER TABLE ngcloud_ru.capacity_storage OWNER TO vc_billing; + +-- +-- TOC entry 220 (class 1259 OID 1893965) +-- Name: storage_profile_types; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE TABLE ngcloud_ru.storage_profile_types ( + id integer NOT NULL, + name character varying(255) NOT NULL +); + + +ALTER TABLE ngcloud_ru.storage_profile_types OWNER TO vc_billing; + +-- +-- TOC entry 219 (class 1259 OID 1893964) +-- Name: storage_profile_types_id_seq; Type: SEQUENCE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE SEQUENCE ngcloud_ru.storage_profile_types_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE ngcloud_ru.storage_profile_types_id_seq OWNER TO vc_billing; + +-- +-- TOC entry 3413 (class 0 OID 0) +-- Dependencies: 219 +-- Name: storage_profile_types_id_seq; Type: SEQUENCE OWNED BY; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER SEQUENCE ngcloud_ru.storage_profile_types_id_seq OWNED BY ngcloud_ru.storage_profile_types.id; + + +-- +-- TOC entry 218 (class 1259 OID 1893959) +-- Name: tenant; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE TABLE ngcloud_ru.tenant ( + id uuid NOT NULL, + name character varying(255) NOT NULL, + wzcode bigint +); + + +ALTER TABLE ngcloud_ru.tenant OWNER TO vc_billing; + +-- +-- TOC entry 221 (class 1259 OID 1893973) +-- Name: vdc; Type: TABLE; Schema: ngcloud_ru; Owner: vc_billing +-- + +CREATE TABLE ngcloud_ru.vdc ( + id uuid NOT NULL, + tenant_id uuid NOT NULL, + name character varying(255) NOT NULL +); + + +ALTER TABLE ngcloud_ru.vdc OWNER TO vc_billing; + +-- +-- TOC entry 3245 (class 2604 OID 1893968) +-- Name: storage_profile_types id; Type: DEFAULT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.storage_profile_types ALTER COLUMN id SET DEFAULT nextval('ngcloud_ru.storage_profile_types_id_seq'::regclass); + + +-- +-- TOC entry 3255 (class 2606 OID 1893987) +-- Name: capacity_resource capacity_resource_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_resource + ADD CONSTRAINT capacity_resource_pkey PRIMARY KEY (vdc_id, "timestamp"); + + +-- +-- TOC entry 3257 (class 2606 OID 1893997) +-- Name: capacity_storage capacity_storage_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_storage + ADD CONSTRAINT capacity_storage_pkey PRIMARY KEY (vdc_id, id, "timestamp"); + + +-- +-- TOC entry 3249 (class 2606 OID 1893972) +-- Name: storage_profile_types storage_profile_types_name_key; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.storage_profile_types + ADD CONSTRAINT storage_profile_types_name_key UNIQUE (name); + + +-- +-- TOC entry 3251 (class 2606 OID 1893970) +-- Name: storage_profile_types storage_profile_types_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.storage_profile_types + ADD CONSTRAINT storage_profile_types_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3247 (class 2606 OID 1893963) +-- Name: tenant tenant_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.tenant + ADD CONSTRAINT tenant_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3253 (class 2606 OID 1893977) +-- Name: vdc vdc_pkey; Type: CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.vdc + ADD CONSTRAINT vdc_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3259 (class 2606 OID 1893988) +-- Name: capacity_resource capacity_resource_vdc_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_resource + ADD CONSTRAINT capacity_resource_vdc_id_fkey FOREIGN KEY (vdc_id) REFERENCES ngcloud_ru.vdc(id) ON DELETE CASCADE; + + +-- +-- TOC entry 3260 (class 2606 OID 1894003) +-- Name: capacity_storage capacity_storage_storage_profile_types_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_storage + ADD CONSTRAINT capacity_storage_storage_profile_types_id_fkey FOREIGN KEY (storage_profile_types_id) REFERENCES ngcloud_ru.storage_profile_types(id); + + +-- +-- TOC entry 3261 (class 2606 OID 1893998) +-- Name: capacity_storage capacity_storage_vdc_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.capacity_storage + ADD CONSTRAINT capacity_storage_vdc_id_fkey FOREIGN KEY (vdc_id) REFERENCES ngcloud_ru.vdc(id) ON DELETE CASCADE; + + +-- +-- TOC entry 3258 (class 2606 OID 1893978) +-- Name: vdc vdc_tenant_id_fkey; Type: FK CONSTRAINT; Schema: ngcloud_ru; Owner: vc_billing +-- + +ALTER TABLE ONLY ngcloud_ru.vdc + ADD CONSTRAINT vdc_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES ngcloud_ru.tenant(id); + + +-- +-- TOC entry 3410 (class 0 OID 0) +-- Dependencies: 222 +-- Name: TABLE capacity_resource; Type: ACL; Schema: ngcloud_ru; Owner: vc_billing +-- + +GRANT SELECT ON TABLE ngcloud_ru.capacity_resource TO grafanabilling; + + +-- +-- TOC entry 3411 (class 0 OID 0) +-- Dependencies: 223 +-- Name: TABLE capacity_storage; Type: ACL; Schema: ngcloud_ru; Owner: vc_billing +-- + +GRANT SELECT ON TABLE ngcloud_ru.capacity_storage TO grafanabilling; + + +-- +-- TOC entry 3412 (class 0 OID 0) +-- Dependencies: 220 +-- Name: TABLE storage_profile_types; Type: ACL; Schema: ngcloud_ru; Owner: vc_billing +-- + +GRANT SELECT ON TABLE ngcloud_ru.storage_profile_types TO grafanabilling; + + +-- +-- TOC entry 3414 (class 0 OID 0) +-- Dependencies: 218 +-- Name: TABLE tenant; Type: ACL; Schema: ngcloud_ru; Owner: vc_billing +-- + +GRANT SELECT ON TABLE ngcloud_ru.tenant TO grafanabilling; + + +-- +-- TOC entry 3415 (class 0 OID 0) +-- Dependencies: 221 +-- Name: TABLE vdc; Type: ACL; Schema: ngcloud_ru; Owner: vc_billing +-- + +GRANT SELECT ON TABLE ngcloud_ru.vdc TO grafanabilling; + + +-- Completed on 2025-09-15 09:53:18 + +-- +-- PostgreSQL database dump complete +-- + diff --git a/etc/db/indexes.sql b/etc/db/indexes.sql new file mode 100644 index 0000000..9c589d1 --- /dev/null +++ b/etc/db/indexes.sql @@ -0,0 +1,9 @@ +CREATE INDEX ON ngcloud_ru.capacity_resource (timestamp); +CREATE INDEX ON ngcloud_ru.capacity_storage (timestamp); + +CREATE INDEX ON s3billing.bucket_stat (timestamp_addition); +CREATE INDEX ON s3billing.usage_bucket_by_user (time); + +CREATE INDEX ON gpu.vm (dt_load); +CREATE INDEX ON gpu.vm_power_state (ts); + diff --git a/mod/payg.cfm.bak b/etc/trash/payg.cfm.bak similarity index 100% rename from mod/payg.cfm.bak rename to etc/trash/payg.cfm.bak diff --git a/payg2.cfm.bak b/etc/trash/payg2.cfm.bak similarity index 100% rename from payg2.cfm.bak rename to etc/trash/payg2.cfm.bak diff --git a/mod/crm_contract.cfm b/mod/crm_contract.cfm new file mode 100644 index 0000000..0b2fbf1 --- /dev/null +++ b/mod/crm_contract.cfm @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mod/payg.cfm b/mod/payg.cfm index 208cbaa..54910fe 100644 --- a/mod/payg.cfm +++ b/mod/payg.cfm @@ -7,277 +7,352 @@ - + + + + + + + - - - - - - select * from ( - values - ('Объектное хранилище S3 CEPH','Дисковое пространство: Объем хранения (HOT)','paas.s3.ceph.vol-m','ГБайт',1.80,0) - ,('Объектное хранилище S3 CEPH','Исходящий трафик (HOT)','paas.s3.ceph.trf-m','ГБайт',1.50,0) - ,('Объектное хранилище S3 CEPH','Запросы GET, HEAD, OPTIONS (HOT)','paas.s3.ceph.get-m','10тыс.шт.',0.35,0) - ,('Объектное хранилище S3 CEPH','Запросы PUT, POST, PATCH (HOT)','paas.s3.ceph.put-m','10тыс.шт.',4.50,0) - - ,('Объектное хранилище S3 CEPH','Дисковое пространство: Объем хранения (COLD)','paas.s3.cphc.vol-m','ГБайт',0.84*1.2,0) - ,('Объектное хранилище S3 CEPH','Исходящий трафик (COLD)','paas.s3.cphc.trf-m','ГБайт',1.25*1.2,0) - ,('Объектное хранилище S3 CEPH','Запросы GET, HEAD, OPTIONS (COLD)','paas.s3.cphc.get-m','10тыс.шт.',0.8*1.2,0) - ,('Объектное хранилище S3 CEPH','Запросы PUT, POST, PATCH (COLD)','paas.s3.cphc.put-m','10тыс.шт.',9.7*1.2,0) - ) as - s (svc, component, code, unit, price, discount) - order by code - - - - - - select 'WZ'||to_char(tenant.wzcode,'FM00000') as wz, vdc.name as vdc_name, - case - when vdc.name like '%-v1cl1%' then 'iaas.ngc.i29' - when vdc.name like '%-v1cl2%' then 'iaas.ngc.i31' - when vdc.name like '%-v1cl4%' then 'iaas.ngc.a28' - when vdc.name like '%-v1cl6%' then 'iaas.ngc.i28' - else '['||vdc.name||']' end as code, - sum(cpu_used/cpu_speed)/4. as core_h, - sum(mem_used)/1024/4. as gb_h - from ngcloud_ru.capacity_resource - join ngcloud_ru.vdc on capacity_resource.vdc_id=vdc.id - join ngcloud_ru.tenant on tenant.id=vdc.tenant_id - where tenant.wzcode = - AND capacity_resource.timestamp >= - AND capacity_resource.timestamp < - group by tenant.wzcode, vdc.name - order by tenant.wzcode, vdc.name; - - + - + #getTickCount() - request.startTickCount# + select max(capacity_resource.timestamp) as dt_load from ngcloud_ru.capacity_resource + + #getTickCount() - request.startTickCount# + + + - - - - select 'WZ'||to_char(tenant.wzcode,'FM00000') as wz, vdc.name as vdc_name, - case - WHEN vdc.name LIKE '%-v1cl1%' THEN 'iaas.ngc.i29' - WHEN vdc.name LIKE '%-v1cl2%' THEN 'iaas.ngc.i31' - WHEN vdc.name LIKE '%-v1cl4%' THEN 'iaas.ngc.a28' - WHEN vdc.name LIKE '%-v1cl6%' THEN 'iaas.ngc.i28' - ELSE '['||vdc.name||']' END - || CASE - WHEN storage_profile_types.name ILIKE '%-SSD%' THEN '.ssd-m' - WHEN storage_profile_types.name ILIKE '%-SAS' THEN '.sas-m' - WHEN storage_profile_types.name ILIKE '%-SATA' THEN '.sata-m' - ELSE '.['|| storage_profile_types.name ||']' END - as code, - storage_profile_types.name, -- *** это не тип, а профайл - sum("limit")/1024./4 as gb_h_limit, -- 4 потому, что сбор раз в 15 минут - sum(used)/1024./4 as gb_h_used - from ngcloud_ru.capacity_storage - join ngcloud_ru.vdc on capacity_storage.vdc_id=vdc.id - join ngcloud_ru.tenant on tenant.id=vdc.tenant_id - join ngcloud_ru.storage_profile_types on capacity_storage.storage_profile_types_id=storage_profile_types.id - where tenant.wzcode = - AND capacity_storage.timestamp >= - AND capacity_storage.timestamp < - group by tenant.wzcode, vdc.name, storage_profile_types.name - order by tenant.wzcode, vdc.name, storage_profile_types.name; - select max(capacity_storage.timestamp) as dt_load from ngcloud_ru.capacity_storage + #getTickCount() - request.startTickCount# - - - - select /* *** ниже дублирование кода агрегации - round ceil etc, обратить внимание при правке */ - (sum(bucket_stat.usage_rgw_main_size_actual)/) as vol_B - ,ceil(sum(bucket_stat.usage_rgw_main_size_actual)//1024/1024/1024) as vol_GB - ,greatest(ceil(sum(bucket_stat.usage_rgw_main_size_actual)/ - /1024/1024/1024)- - case when bucket_stat.placement_id = 1 then 1 else 0 end, 0) as vol_GB_free_tier_subtracted /*считается не в точности так, как в функции*/ - ,case - when bucket_stat.placement_id = 1 then 'paas.s3.ceph' - when bucket_stat.placement_id = 2 then 'paas.s3.cphc' - else '['|| TO_CHAR(bucket_stat.placement_id,'FM9') ||']' end as code - --,bucket_stat.placement_id - ,'WZ'||lpad(bucket_stat.owner, 5, '0') as wz -- *** здесь не число, а строка, поэтому другая формула обратной сборки WZ - - from s3billing.bucket_stat - join s3billing.placement ON s3billing.placement.id=bucket_stat.placement_id - join s3billing.bucket_info ON bucket_info.id=bucket_stat.bucket_id - where bucket_stat.placement_id in (1,2) - AND bucket_stat.owner = - AND bucket_stat.timestamp_addition >= - AND bucket_stat.timestamp_addition < - group by bucket_stat.owner, bucket_stat.placement_id - order by bucket_stat.owner, bucket_stat.placement_id; - - - - - - - select max(timestamp_addition) as dt_load from s3billing.bucket_stat - - -select - sum( - CASE WHEN - (category.name LIKE 'get%' - OR category.name LIKE 'head%' - OR category.name LIKE 'options%' - ) THEN ops ELSE 0 END - ) as get - ,ceil(sum( - CASE WHEN - (category.name LIKE 'get%' - OR category.name LIKE 'head%' - OR category.name LIKE 'options%' - ) THEN ops ELSE 0 END - )/10000) as get_10k - ,greatest(ceil(sum( - CASE WHEN - (category.name LIKE 'get%' - OR category.name LIKE 'head%' - OR category.name LIKE 'options%' - ) THEN ops ELSE 0 END - )/10000) - CASE WHEN bucket_info.placement_id = 1 THEN 10 ELSE 0 END, 0 - ) as get_10k_free_tier_subtracted - - ,sum( - CASE WHEN - (category.name LIKE 'put%' - OR category.name LIKE 'post%' - OR category.name LIKE 'patch%' - OR category.name LIKE 'list%' - ) THEN ops ELSE 0 END - ) as put - ,ceil(sum( - CASE WHEN - (category.name LIKE 'put%' - OR category.name LIKE 'post%' - OR category.name LIKE 'patch%' - OR category.name LIKE 'list%' - ) THEN ops ELSE 0 END - )/10000) as put_10k - ,greatest(ceil(sum( - CASE WHEN - (category.name LIKE 'put%' - OR category.name LIKE 'post%' - OR category.name LIKE 'patch%' - OR category.name LIKE 'list%' - ) THEN ops ELSE 0 END - )/10000) - CASE WHEN bucket_info.placement_id = 1 THEN 1 ELSE 0 END, 0 - ) as put_10k_free_tier_subtracted - - ,(sum(bytes_sent)) as bytes_sent - ,ceil(sum(bytes_sent)/1024/1024/1024) as bytes_sent_GB - ,greatest(ceil(sum(bytes_sent)/1024/1024/1024) - CASE WHEN bucket_info.placement_id = 1 THEN 100 ELSE 0 END, 0 - ) as bytes_sent_GB_free_tier_subtracted - - ,case - when bucket_info.placement_id = 1 then 'paas.s3.ceph' - when bucket_info.placement_id = 2 then 'paas.s3.cphc' - else '['|| TO_CHAR(bucket_info.placement_id,'FM9') ||']' end as code --*** зачем делать там ключ bigint - ,bucket_info.placement_id - --category.name, bucket_info.name - ,'WZ'||lpad(user_info.name, 5, '0') as wz - from s3billing.usage_bucket_by_user - join s3billing.user_info on usage_bucket_by_user.user_id=user_info.id - join s3billing.category on usage_bucket_by_user.category_id=category.id - join s3billing.bucket_info on usage_bucket_by_user.bucketid=bucket_info.id - join s3billing.placement on bucket_info.placement_id=placement.id - where 1=1 - AND user_info.name = - AND usage_bucket_by_user.time >= - AND usage_bucket_by_user.time < - group by user_info.name, bucket_info.placement_id - order by user_info.name, bucket_info.placement_id; - - - + #getTickCount() - request.startTickCount# + select max(time) as dt_load from s3billing.usage_bucket_by_user + + #getTickCount() - request.startTickCount# + + + - -select wz, code || '.vcpu-m' as code, core_h as raw_metric, core_h as metric, core_h as chargeable_metric from qComputing -union all -select wz, code || '.ram-m' as code, gb_h as raw_metric, gb_h as metric, gb_h as chargeable_metric from qComputing -union all -select wz, code, gb_h_used as raw_metric, gb_h_used as metric, gb_h_used as chargeable_metric from qStorage -union all -select wz, code || '.vol-m', vol_b as raw_metric, vol_gb as metric, vol_GB_free_tier_subtracted as chargeable_metric from qS3Vol -union all -select wz, code || '.get-m', get as raw_metric, get_10k as metric, get_10k_free_tier_subtracted as chargeable_metric from qS3OpsTrf -union all -select wz, code || '.put-m', put as raw_metric, put_10k as metric, put_10k_free_tier_subtracted as chargeable_metric from qS3OpsTrf -union all -select wz, code || '.trf-m', bytes_sent as raw_metric, bytes_sent_gb as metric, bytes_sent_gb_free_tier_subtracted as chargeable_metric from qS3OpsTrf + + + + + +select catalogName as svc, component, fullCode as code, measureShort as unit +, priceWVat as price, (discount + serviceDiscount - discount*serviceDiscount/100) as discount +,serviceStart, serviceEnd, serviceHash +from qSpecification - + + + + + + + + + select 'WZ'||to_char(tenant.wzcode,'FM00000') as wz, vdc.name as vdc_name, + case + when vdc.name like '%-v1cl1%' then 'iaas.ngc.i29' + when vdc.name like '%-v1cl2%' then 'iaas.ngc.i31' + when vdc.name like '%-v1cl4%' then 'iaas.ngc.a28' + when vdc.name like '%-v1cl6%' then 'iaas.ngc.i28' + else '['||vdc.name||']' end as code, + sum(cpu_used/cpu_speed)/4. as core_h, + sum(mem_used)/1024/4. as gb_h + from ngcloud_ru.capacity_resource + join ngcloud_ru.vdc on capacity_resource.vdc_id=vdc.id + join ngcloud_ru.tenant on tenant.id=vdc.tenant_id + where tenant.wzcode = + AND capacity_resource.timestamp::date = + + group by tenant.wzcode, vdc.name + order by tenant.wzcode, vdc.name; + + + + #getTickCount() - request.startTickCount# + + + + + + + select 'WZ'||to_char(tenant.wzcode,'FM00000') as wz, vdc.name as vdc_name, + case + WHEN vdc.name LIKE '%-v1cl1%' THEN 'iaas.ngc.i29' + WHEN vdc.name LIKE '%-v1cl2%' THEN 'iaas.ngc.i31' + WHEN vdc.name LIKE '%-v1cl4%' THEN 'iaas.ngc.a28' + WHEN vdc.name LIKE '%-v1cl6%' THEN 'iaas.ngc.i28' + ELSE '['||vdc.name||']' END + || CASE + WHEN storage_profile_types.name ILIKE '%-SSD%' THEN '.ssd-m' + WHEN storage_profile_types.name ILIKE '%-SAS' THEN '.sas-m' + WHEN storage_profile_types.name ILIKE '%-SATA' THEN '.sata-m' + ELSE '.['|| storage_profile_types.name ||']' END + as code, + storage_profile_types.name, -- *** это не тип, а профайл + sum("limit")/1024./4 as gb_h_limit, -- 4 потому, что сбор раз в 15 минут + sum(used)/1024./4 as gb_h_used + from ngcloud_ru.capacity_storage + join ngcloud_ru.vdc on capacity_storage.vdc_id=vdc.id + join ngcloud_ru.tenant on tenant.id=vdc.tenant_id + join ngcloud_ru.storage_profile_types on capacity_storage.storage_profile_types_id=storage_profile_types.id + where tenant.wzcode = + AND capacity_storage.timestamp ::date = + group by tenant.wzcode, vdc.name, storage_profile_types.name + order by tenant.wzcode, vdc.name, storage_profile_types.name; + + + + + + + select /* *** ниже дублирование кода агрегации - round ceil etc, обратить внимание при правке */ + (sum(bucket_stat.usage_rgw_main_size_actual)/) as vol_B + ,ceil(sum(bucket_stat.usage_rgw_main_size_actual)//1024/1024/1024) as vol_GB + ,greatest(ceil(sum(bucket_stat.usage_rgw_main_size_actual)/ + /1024/1024/1024)- + case when bucket_stat.placement_id = 1 then 1 else 0 end, 0) as vol_GB_free_tier_subtracted /*считается не в точности так, как в функции*/ + ,case + when bucket_stat.placement_id = 1 then 'paas.s3.ceph' + when bucket_stat.placement_id = 2 then 'paas.s3.cphc' + else '['|| TO_CHAR(bucket_stat.placement_id,'FM9') ||']' end as code + --,bucket_stat.placement_id + ,'WZ'||lpad(bucket_stat.owner, 5, '0') as wz -- *** здесь не число, а строка, поэтому другая формула обратной сборки WZ + + from s3billing.bucket_stat + join s3billing.placement ON s3billing.placement.id=bucket_stat.placement_id + join s3billing.bucket_info ON bucket_info.id=bucket_stat.bucket_id + where bucket_stat.placement_id in (1,2) + AND bucket_stat.owner = + AND bucket_stat.timestamp_addition::date = + + group by bucket_stat.owner, bucket_stat.placement_id + order by bucket_stat.owner, bucket_stat.placement_id; + + + + #getTickCount() - request.startTickCount# + + + + + + + select + sum( + CASE WHEN + (category.name LIKE 'get%' + OR category.name LIKE 'head%' + OR category.name LIKE 'options%' + ) THEN ops ELSE 0 END + ) as get + ,ceil(sum( + CASE WHEN + (category.name LIKE 'get%' + OR category.name LIKE 'head%' + OR category.name LIKE 'options%' + ) THEN ops ELSE 0 END + )/10000) as get_10k + ,greatest(ceil(sum( + CASE WHEN + (category.name LIKE 'get%' + OR category.name LIKE 'head%' + OR category.name LIKE 'options%' + ) THEN ops ELSE 0 END + )/10000) - CASE WHEN bucket_info.placement_id = 1 THEN 10 ELSE 0 END, 0 + ) as get_10k_free_tier_subtracted + + ,sum( + CASE WHEN + (category.name LIKE 'put%' + OR category.name LIKE 'post%' + OR category.name LIKE 'patch%' + OR category.name LIKE 'list%' + ) THEN ops ELSE 0 END + ) as put + ,ceil(sum( + CASE WHEN + (category.name LIKE 'put%' + OR category.name LIKE 'post%' + OR category.name LIKE 'patch%' + OR category.name LIKE 'list%' + ) THEN ops ELSE 0 END + )/10000) as put_10k + ,greatest(ceil(sum( + CASE WHEN + (category.name LIKE 'put%' + OR category.name LIKE 'post%' + OR category.name LIKE 'patch%' + OR category.name LIKE 'list%' + ) THEN ops ELSE 0 END + )/10000) - CASE WHEN bucket_info.placement_id = 1 THEN 1 ELSE 0 END, 0 + ) as put_10k_free_tier_subtracted + + ,(sum(bytes_sent)) as bytes_sent + ,ceil(sum(bytes_sent)/1024/1024/1024) as bytes_sent_GB + ,greatest(ceil(sum(bytes_sent)/1024/1024/1024) - CASE WHEN bucket_info.placement_id = 1 THEN 100 ELSE 0 END, 0 + ) as bytes_sent_GB_free_tier_subtracted + ,case + when bucket_info.placement_id = 1 then 'paas.s3.ceph' + when bucket_info.placement_id = 2 then 'paas.s3.cphc' + else '['|| TO_CHAR(bucket_info.placement_id,'FM9') ||']' end as code --*** зачем делать там ключ bigint + ,bucket_info.placement_id + --category.name, bucket_info.name + ,'WZ'||lpad(user_info.name, 5, '0') as wz + from s3billing.usage_bucket_by_user + join s3billing.user_info on usage_bucket_by_user.user_id=user_info.id + join s3billing.category on usage_bucket_by_user.category_id=category.id + join s3billing.bucket_info on usage_bucket_by_user.bucketid=bucket_info.id + join s3billing.placement on bucket_info.placement_id=placement.id + where 1=1 + AND user_info.name = + AND usage_bucket_by_user.time::date = + group by user_info.name, bucket_info.placement_id + order by user_info.name, bucket_info.placement_id; + + + + #getTickCount() - request.startTickCount# + + + + + + + select wz, code || '.vcpu-m' as code, core_h as raw_metric, core_h as metric, core_h as chargeable_metric from qComputing + union all + select wz, code || '.ram-m' as code, gb_h as raw_metric, gb_h as metric, gb_h as chargeable_metric from qComputing + union all + select wz, code, gb_h_used as raw_metric, gb_h_used as metric, gb_h_used as chargeable_metric from qStorage + union all + select wz, code || '.vol-m', vol_b as raw_metric, vol_gb as metric, vol_GB_free_tier_subtracted as chargeable_metric from qS3Vol + union all + select wz, code || '.get-m', get as raw_metric, get_10k as metric, get_10k_free_tier_subtracted as chargeable_metric from qS3OpsTrf + union all + select wz, code || '.put-m', put as raw_metric, put_10k as metric, put_10k_free_tier_subtracted as chargeable_metric from qS3OpsTrf + union all + select wz, code || '.trf-m', bytes_sent as raw_metric, bytes_sent_gb as metric, bytes_sent_gb_free_tier_subtracted as chargeable_metric from qS3OpsTrf + + + + #getTickCount() - request.startTickCount# + + + + + + + + + + SELECT + + s.code + m.code as m_code + s.svc + s.component + m.chargeable_metric + s.unit + s.price*(100-s.discount)/100 as discounted_price + s.price*(100-s.discount)/100*m.chargeable_metric as charge + + + s.price + s.discount + m.raw_metric + m.metric + s.serviceStart + s.serviceEnd + s.serviceHash + as dt + + + FROM qSpec as s, qUnifiedMetric as m + WHERE m.wz= AND s.code=m.code + AND s.serviceStart <= + AND ( <= s.serviceEnd OR s.serviceEnd IS NULL) + order by s.code + + + + + + select * from qTotal + union all + select * from qCharge + + + + + + + + + #getTickCount() - request.startTickCount# + + + + + #getTickCount() - request.startTickCount# - - - -SELECT - - s.code - m.code as m_code - s.svc - s.component - m.chargeable_metric - s.unit - s.price*(100-s.discount)/100 as discounted_price - s.price*(100-s.discount)/100*m.chargeable_metric as charge - - - s.price - s.discount - m.raw_metric - m.metric - - - -FROM qSpec as s, qUnifiedMetric as m -WHERE m.wz= AND s.code=m.code -order by s.code - - - - - - + + + + diff --git a/mod/payg.cfm.1.bak b/mod/payg.cfm.1.bak new file mode 100644 index 0000000..57c4604 --- /dev/null +++ b/mod/payg.cfm.1.bak @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + #getTickCount() - request.startTickCount# + + + + + + + + +select catalogName as svc, component, fullCode as code, measureShort as unit +, priceWVat as price, (discount + serviceDiscount - discount*serviceDiscount/100) as discount +,serviceStart, serviceEnd +from qSpecification + + + + + + select 'WZ'||to_char(tenant.wzcode,'FM00000') as wz, vdc.name as vdc_name, + case + when vdc.name like '%-v1cl1%' then 'iaas.ngc.i29' + when vdc.name like '%-v1cl2%' then 'iaas.ngc.i31' + when vdc.name like '%-v1cl4%' then 'iaas.ngc.a28' + when vdc.name like '%-v1cl6%' then 'iaas.ngc.i28' + else '['||vdc.name||']' end as code, + sum(cpu_used/cpu_speed)/4. as core_h, + sum(mem_used)/1024/4. as gb_h + from ngcloud_ru.capacity_resource + join ngcloud_ru.vdc on capacity_resource.vdc_id=vdc.id + join ngcloud_ru.tenant on tenant.id=vdc.tenant_id + where tenant.wzcode = + AND capacity_resource.timestamp >= + AND capacity_resource.timestamp < + group by tenant.wzcode, vdc.name + order by tenant.wzcode, vdc.name; + + + + #getTickCount() - request.startTickCount# + + + + + + select max(capacity_resource.timestamp) as dt_load from ngcloud_ru.capacity_resource + + + + #getTickCount() - request.startTickCount# + + + + + + + + select 'WZ'||to_char(tenant.wzcode,'FM00000') as wz, vdc.name as vdc_name, + case + WHEN vdc.name LIKE '%-v1cl1%' THEN 'iaas.ngc.i29' + WHEN vdc.name LIKE '%-v1cl2%' THEN 'iaas.ngc.i31' + WHEN vdc.name LIKE '%-v1cl4%' THEN 'iaas.ngc.a28' + WHEN vdc.name LIKE '%-v1cl6%' THEN 'iaas.ngc.i28' + ELSE '['||vdc.name||']' END + || CASE + WHEN storage_profile_types.name ILIKE '%-SSD%' THEN '.ssd-m' + WHEN storage_profile_types.name ILIKE '%-SAS' THEN '.sas-m' + WHEN storage_profile_types.name ILIKE '%-SATA' THEN '.sata-m' + ELSE '.['|| storage_profile_types.name ||']' END + as code, + storage_profile_types.name, -- *** это не тип, а профайл + sum("limit")/1024./4 as gb_h_limit, -- 4 потому, что сбор раз в 15 минут + sum(used)/1024./4 as gb_h_used + from ngcloud_ru.capacity_storage + join ngcloud_ru.vdc on capacity_storage.vdc_id=vdc.id + join ngcloud_ru.tenant on tenant.id=vdc.tenant_id + join ngcloud_ru.storage_profile_types on capacity_storage.storage_profile_types_id=storage_profile_types.id + where tenant.wzcode = + AND capacity_storage.timestamp >= + AND capacity_storage.timestamp < + group by tenant.wzcode, vdc.name, storage_profile_types.name + order by tenant.wzcode, vdc.name, storage_profile_types.name; + + + select max(capacity_storage.timestamp) as dt_load from ngcloud_ru.capacity_storage + + + + #getTickCount() - request.startTickCount# + + + + + + + + select /* *** ниже дублирование кода агрегации - round ceil etc, обратить внимание при правке */ + (sum(bucket_stat.usage_rgw_main_size_actual)/) as vol_B + ,ceil(sum(bucket_stat.usage_rgw_main_size_actual)//1024/1024/1024) as vol_GB + ,greatest(ceil(sum(bucket_stat.usage_rgw_main_size_actual)/ + /1024/1024/1024)- + case when bucket_stat.placement_id = 1 then 1 else 0 end, 0) as vol_GB_free_tier_subtracted /*считается не в точности так, как в функции*/ + ,case + when bucket_stat.placement_id = 1 then 'paas.s3.ceph' + when bucket_stat.placement_id = 2 then 'paas.s3.cphc' + else '['|| TO_CHAR(bucket_stat.placement_id,'FM9') ||']' end as code + --,bucket_stat.placement_id + ,'WZ'||lpad(bucket_stat.owner, 5, '0') as wz -- *** здесь не число, а строка, поэтому другая формула обратной сборки WZ + + from s3billing.bucket_stat + join s3billing.placement ON s3billing.placement.id=bucket_stat.placement_id + join s3billing.bucket_info ON bucket_info.id=bucket_stat.bucket_id + where bucket_stat.placement_id in (1,2) + AND bucket_stat.owner = + AND bucket_stat.timestamp_addition >= + AND bucket_stat.timestamp_addition < + group by bucket_stat.owner, bucket_stat.placement_id + order by bucket_stat.owner, bucket_stat.placement_id; + + + + #getTickCount() - request.startTickCount# + + + + + + select max(timestamp_addition) as dt_load from s3billing.bucket_stat + + + + #getTickCount() - request.startTickCount# + + + + + +select + sum( + CASE WHEN + (category.name LIKE 'get%' + OR category.name LIKE 'head%' + OR category.name LIKE 'options%' + ) THEN ops ELSE 0 END + ) as get + ,ceil(sum( + CASE WHEN + (category.name LIKE 'get%' + OR category.name LIKE 'head%' + OR category.name LIKE 'options%' + ) THEN ops ELSE 0 END + )/10000) as get_10k + ,greatest(ceil(sum( + CASE WHEN + (category.name LIKE 'get%' + OR category.name LIKE 'head%' + OR category.name LIKE 'options%' + ) THEN ops ELSE 0 END + )/10000) - CASE WHEN bucket_info.placement_id = 1 THEN 10 ELSE 0 END, 0 + ) as get_10k_free_tier_subtracted + + ,sum( + CASE WHEN + (category.name LIKE 'put%' + OR category.name LIKE 'post%' + OR category.name LIKE 'patch%' + OR category.name LIKE 'list%' + ) THEN ops ELSE 0 END + ) as put + ,ceil(sum( + CASE WHEN + (category.name LIKE 'put%' + OR category.name LIKE 'post%' + OR category.name LIKE 'patch%' + OR category.name LIKE 'list%' + ) THEN ops ELSE 0 END + )/10000) as put_10k + ,greatest(ceil(sum( + CASE WHEN + (category.name LIKE 'put%' + OR category.name LIKE 'post%' + OR category.name LIKE 'patch%' + OR category.name LIKE 'list%' + ) THEN ops ELSE 0 END + )/10000) - CASE WHEN bucket_info.placement_id = 1 THEN 1 ELSE 0 END, 0 + ) as put_10k_free_tier_subtracted + + ,(sum(bytes_sent)) as bytes_sent + ,ceil(sum(bytes_sent)/1024/1024/1024) as bytes_sent_GB + ,greatest(ceil(sum(bytes_sent)/1024/1024/1024) - CASE WHEN bucket_info.placement_id = 1 THEN 100 ELSE 0 END, 0 + ) as bytes_sent_GB_free_tier_subtracted + + ,case + when bucket_info.placement_id = 1 then 'paas.s3.ceph' + when bucket_info.placement_id = 2 then 'paas.s3.cphc' + else '['|| TO_CHAR(bucket_info.placement_id,'FM9') ||']' end as code --*** зачем делать там ключ bigint + ,bucket_info.placement_id + --category.name, bucket_info.name + ,'WZ'||lpad(user_info.name, 5, '0') as wz + from s3billing.usage_bucket_by_user + join s3billing.user_info on usage_bucket_by_user.user_id=user_info.id + join s3billing.category on usage_bucket_by_user.category_id=category.id + join s3billing.bucket_info on usage_bucket_by_user.bucketid=bucket_info.id + join s3billing.placement on bucket_info.placement_id=placement.id + where 1=1 + AND user_info.name = + AND usage_bucket_by_user.time >= + AND usage_bucket_by_user.time < + group by user_info.name, bucket_info.placement_id + order by user_info.name, bucket_info.placement_id; + + + + #getTickCount() - request.startTickCount# + + + + + + select max(time) as dt_load from s3billing.usage_bucket_by_user + + + + #getTickCount() - request.startTickCount# + + + + + + +select wz, code || '.vcpu-m' as code, core_h as raw_metric, core_h as metric, core_h as chargeable_metric from qComputing +union all +select wz, code || '.ram-m' as code, gb_h as raw_metric, gb_h as metric, gb_h as chargeable_metric from qComputing +union all +select wz, code, gb_h_used as raw_metric, gb_h_used as metric, gb_h_used as chargeable_metric from qStorage +union all +select wz, code || '.vol-m', vol_b as raw_metric, vol_gb as metric, vol_GB_free_tier_subtracted as chargeable_metric from qS3Vol +union all +select wz, code || '.get-m', get as raw_metric, get_10k as metric, get_10k_free_tier_subtracted as chargeable_metric from qS3OpsTrf +union all +select wz, code || '.put-m', put as raw_metric, put_10k as metric, put_10k_free_tier_subtracted as chargeable_metric from qS3OpsTrf +union all +select wz, code || '.trf-m', bytes_sent as raw_metric, bytes_sent_gb as metric, bytes_sent_gb_free_tier_subtracted as chargeable_metric from qS3OpsTrf + + + + #getTickCount() - request.startTickCount# + + + + + + + + + + + + +SELECT + + s.code + m.code as m_code + s.svc + s.component + m.chargeable_metric + s.unit + s.price*(100-s.discount)/100 as discounted_price + s.price*(100-s.discount)/100*m.chargeable_metric as charge + + + s.price + s.discount + m.raw_metric + m.metric + + + +FROM qSpec as s, qUnifiedMetric as m +WHERE m.wz= AND s.code=m.code +order by s.code + + + + #getTickCount() - request.startTickCount# + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/payg.cfm b/payg.cfm index 39178ff..49e11e5 100644 --- a/payg.cfm +++ b/payg.cfm @@ -10,6 +10,7 @@ + @@ -49,12 +50,12 @@ Период с по - + - + #dateFormat(report.qS3OpsTrfAge.dt_load, - Артикул - Кол-во (метрика) + Артикул + Кол-во (метрика) + Оплачиваемый объем Ед.изм. - Цена ₽ GPL, с НДС + Цена ₽ с НДС Стоимость ₽ с НДС     @@ -101,7 +103,7 @@ S3 операции и трафик: #dateFormat(report.qS3OpsTrfAge.dt_load, Ключ строки ---> - Оплачиваемый объем + - #metric# +