From 01c45402d1ec69a11d7546b856126a9447ac7064 Mon Sep 17 00:00:00 2001 From: Sergei Dorogin Date: Mon, 12 Aug 2024 16:32:25 +0300 Subject: [PATCH] gaarf-wf: workflow support different writers via 'writer' argument wf: `bq_writer_options` was renamed to `writer_options` cf: Cloud Function gaarf support different writers via 'writer' QS argument ('bq' is still the default) cf: setting `outputPath` option by default for all writers (as `gs://${projectId}/tmp`) Change-Id: I20eae43b0ee1aeaadcee460dbb29dd6be4259b27 --- gcp/README.md | 8 +- gcp/create-gaarf-wf/build/index.js | 5 +- gcp/create-gaarf-wf/build/index.js.map | 2 +- gcp/create-gaarf-wf/package-lock.json | 4 +- gcp/create-gaarf-wf/package.json | 2 +- gcp/create-gaarf-wf/src/index.ts | 5 +- gcp/functions/build/src/gaarf-bq-view.js | 14 ++ gcp/functions/build/src/gaarf-bq-view.js.map | 2 +- gcp/functions/build/src/gaarf-bq.js | 14 ++ gcp/functions/build/src/gaarf-bq.js.map | 2 +- gcp/functions/build/src/gaarf-getcids.js | 47 +++++- gcp/functions/build/src/gaarf-getcids.js.map | 2 +- gcp/functions/build/src/gaarf.d.ts | 2 +- gcp/functions/build/src/gaarf.js | 117 +++++++++----- gcp/functions/build/src/gaarf.js.map | 2 +- gcp/functions/build/src/utils.d.ts | 8 + gcp/functions/build/src/utils.js | 23 ++- gcp/functions/build/src/utils.js.map | 2 +- gcp/functions/package-lock.json | 56 ++++++- gcp/functions/package.json | 2 +- gcp/functions/src/gaarf-bq-view.ts | 16 +- gcp/functions/src/gaarf-bq.ts | 21 ++- gcp/functions/src/gaarf-getcids.ts | 62 +++++++- gcp/functions/src/gaarf.ts | 150 ++++++++++++------ gcp/functions/src/utils.ts | 23 +++ gcp/workflow/workflow-ads.yaml | 21 +-- gcp/workflow/workflow.yaml | 151 ++++++++++++------- 27 files changed, 585 insertions(+), 178 deletions(-) diff --git a/gcp/README.md b/gcp/README.md index e99390fc..95d54d68 100644 --- a/gcp/README.md +++ b/gcp/README.md @@ -134,15 +134,18 @@ Alternatively you can provide all configuration values for Ads API via environme Body: * `script` - an object with two fields `query` and `name`, where `query` contains an Ads query text (as alternative to providing it via the `script_path` query argument) and `name` is a name (normally base file name would use) used for target table with data retuned by the script * `macro` - an object with macros for ads queries +* `writer_options` - an object with additional options for a writer Query string: * `ads_config_path` - a path to Ads config, e.g. gs://bucket/path/to/google-ads.yaml, if not passed then a local file will be tried to used (should be deployed with the function) * `script_path` - a path to Ads query file, currently only GCS paths are supported, e.g. gs://bucket/path/to/file, it's mandatory if script/name were not provided via body -* `single_customer` - true/false, pass true to prevent fetching child accounts for a given customer id (`customer_id`) +* `writer` - writer to use: "bq", "json", "csv". By default - "bq" (BigQuery) * `customer_id` - customer id (CID), without '-', can be specified in google-ads.yaml as well, if so then can be omitted +* `expand_mcc` - true to expand account in `customer_id` argument. By default (if false) it also disables creating union views * `bq_project_id` - BigQuery project id for output * `bq_dataset` - BiQuery dataset id for output * `bq_dataset_location` - BigQuery dataset location +* `output_path` - output path for interim data (for BigQueryWriter) or generated data (Csv/Json writers) Returns: * A map of CID (customer account id) to row counts. @@ -165,11 +168,12 @@ Query string: * `ads_config_path` - a path to Ads config, same as for gaarf * `customer_id` - customer id (CID), without '-', can be specified in google-ads.yaml as well, if so then can be omitted * `customer_ids_query` - custom Ads query to filter customer accounts expanded from `customer_id`, same as same-name argument for gaarf cli tool. Query's first column should be a customer id (CID) +* `customer_ids_ignore` - a list of customer ids to exclude from the result * `customer_ids_batchsize` - a size of batches into which account ids list will be split. * `customer_ids_offset` - an offset in the customer ids list resulted from the seed CIDs and optional query in `customer_ids_query`, it allows to implement an external batching. * `flatten` - flatten the list of customer ids. If `customer_ids_offset` is provided then the list will be a subset of CIDs otherwise it will be the whole list of accounts, ignoring batching (regadless of the customer_ids_batchsize's value) Body: -* `customer_ids_query` - same as QueryString's argument as alternative +* `customer_ids_query` - same as QueryString's argument as an alternative Returns: if no `flatten` specifiedd then the CF returns an object: diff --git a/gcp/create-gaarf-wf/build/index.js b/gcp/create-gaarf-wf/build/index.js index b7770b39..fe99f7a3 100755 --- a/gcp/create-gaarf-wf/build/index.js +++ b/gcp/create-gaarf-wf/build/index.js @@ -825,7 +825,7 @@ cd .. // now we detect macro used in queries and ask for their values const macro_ads = await get_macro_values(path.join(cwd, path_to_ads_queries), answers, 'ads_macro'); const macro_bq = await get_macro_values(path.join(cwd, path_to_bq_queries), answers, 'bq_macro'); - const bq_writer_options = answers.bq_writer_options; + const writer_options = answers.writer_options; const bq_location = gcp_region && gcp_region.startsWith('europe') ? 'europe' : ''; const output_dataset = answers2.output_dataset; const customer_id = sanitizeCustomerId(answers2.customer_id); @@ -840,7 +840,7 @@ cd .. ads_config_path: `${gcs_base_path}/google-ads.yaml`, customer_ids_query: custom_query_gcs_path, bq_dataset_location: bq_location, - bq_writer_options: bq_writer_options, + writer_options: writer_options, ads_macro: macro_ads, bq_macro: macro_bq, }; @@ -849,6 +849,7 @@ cd .. // Create run-wf.sh deploy_shell_script('run-wf.sh', `set -e ./ads-api-fetcher/gcp/setup.sh run_wf --settings $(readlink -f "./${settings_file}") --data $(readlink -f "./${wf_data_file}") +#./ads-api-fetcher/gcp/setup.sh run_job --settings $(readlink -f "./${settings_file}") `); fs.writeFileSync(settings_file, dump_settings(settings)); // now execute some scripts diff --git a/gcp/create-gaarf-wf/build/index.js.map b/gcp/create-gaarf-wf/build/index.js.map index 74242980..f8d54548 100644 --- a/gcp/create-gaarf-wf/build/index.js.map +++ b/gcp/create-gaarf-wf/build/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,oCAAoC;AACpC;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,aAA8B,MAAM,eAAe,CAAC;AAC3D,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,QAAuC,MAAM,UAAU,CAAC;AAC/D,OAAO,OAA6B,MAAM,SAAS,CAAC;AACpD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAEhE,MAAM,QAAQ,GAAG,sDAAsD,CAAC;AACxE,MAAM,QAAQ,GAAG,0BAA0B,CAAC;AAC5C,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEhD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;AAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC;AACzC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACzC,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,IAAI,cAAc,CAAC;AAE1D,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,SAAS,OAAO,CAAC,IAAyB;IACxC,6DAA6D;IAC7D,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,GAAG,EAAE;QACP,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzB,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SACnB;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACpB;SAAM;QACL,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;KACrB;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,OAAe;IAC5D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,SAAS,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,SAAS,CAAC,GAAW,EAAE,OAAuB;IACrD,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE;QACrC,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,KAAK,CAAC,MAAM,EAAE;QAChB,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;KAChC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,QAAQ,CACf,GAAW,EACX,OAAyC,EACzC,OAKC;IAED,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IACxB,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;QAC7C,8DAA8D;QAC9D,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;KAC1B;IACD,IAAI,OAAO,EAAE;QACX,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,OAAO,GAAG,IAAI,CAAC;KAChB;IACD,IAAI,OAAO;QAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,QAAQ,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC;KACjE;IACD,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE;QACtC,KAAK,EAAE,IAAI;QACX,wCAAwC;QACxC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;QAClC,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;;QAC3B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAA,EAAE,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC;YAChB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,MAAA,EAAE,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC;YAChB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE;YAC9B,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAA,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAA,EAAE;gBAC1D,gFAAgF;gBAChF,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC9C,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CACrD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CACnC,CAAC;gBACF,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7B,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;gBACH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpB,MAAM,SAAS,GAAG,KAAK;yBACpB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;yBACrD,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;oBACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC3B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;oBAC7C,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;iBAClC;aACF;YACD,IAAI,MAAM,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAA,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,IAAI,IAAI,KAAK,CAAC,EAAE;gBAClE,sEAAsE;gBACtE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aACrB;YACD,IAAI,QAAQ,EAAE;gBACZ,EAAE,CAAC,cAAc,CACf,QAAQ,EACR,IAAI,IAAI,IAAI,EAAE,KAAK,GAAG,WAAW,IAAI,cAAc,CACpD,CAAC;gBACF,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;gBAC3C,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;aAC5C;YACD,OAAO,CAAC;gBACN,IAAI;gBACJ,MAAM,EAAE,MAAM,IAAI,EAAE;gBACpB,MAAM,EAAE,MAAM,IAAI,EAAE;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAAqB;IACrD,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE;QACjC,OAAO,OAAO,CAAC,UAAU,CAAC;KAC3B;IACD,8FAA8F;IAC9F,wEAAwE;IACxE,oGAAoG;IACpG,yFAAyF;IACzF,MAAM,OAAO,GAAG;QACd,YAAY;QACZ,YAAY;QACZ,iBAAiB;QACjB,iBAAiB;QACjB,aAAa;QACb,iBAAiB;QACjB,sBAAsB;QACtB,iBAAiB;QACjB,cAAc;QACd,cAAc;QACd,cAAc;QACd,cAAc;QACd,yBAAyB;QACzB,oBAAoB;QACpB,aAAa;QACb,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;KACX,CAAC;IACF,MAAM,WAAW,GAAG,YAAY,CAAC;IACjC,MAAM,OAAO,GAAG,CAAC,EAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAC,CAAC,CAAC,MAAM,CACpE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACjB,OAAO;YACL,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC7B,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,8DAA8D;QACvE,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,UAAU,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,OAAqB;IACzD,mBAAmB;IACnB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,IAAI,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7C,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QACxD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,gFAAgF,CACjF;YACC,SAAS;YACT,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAC1D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAClB;IACD,yCAAyC;IACzC,MAAM,WAAW,GAAG,SAAS,CAAC,gCAAgC,CAAC;SAC5D,QAAQ,EAAE;SACV,IAAI,EAAE,CAAC;IACV,IAAI,WAAW,CAAC,QAAQ,CAAC,yCAAyC,CAAC,EAAE;QACnE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC;YAC/C,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CACnC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAClB;IACD,IAAI,cAAc,GAAG,SAAS,CAAC,8CAA8C,CAAC;SAC3E,QAAQ,EAAE;SACV,IAAI,EAAE,CAAC;IACV,IAAI,cAAc,EAAE;QAClB,IACE,CACE,MAAM,MAAM,CACV;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,gCAAgC,KAAK,CAAC,KAAK,CAClD,cAAc,CACf,qDAAqD;YACtD,OAAO,EAAE,IAAI;SACd,EACD,OAAO,CACR,CACF,CAAC,mBAAmB,EACrB;YACA,OAAO,cAAc,CAAC;SACvB;KACF;IACD,6CAA6C;IAC7C,MAAM,YAAY,GAAG,SAAS,CAC5B,qFAAqF,CACtF,CAAC,QAAQ,EAAE,CAAC;IACb,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;IACvC,IAAI,OAAO,GAAG,IAAI;SACf,MAAM,CAAC,CAAC,IAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACrC,GAAG,CAAC,GAAG,CAAC,EAAE;QACT,OAAO;YACL,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;SACd,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,MAAM,WAAW,GAAG,YAAY,CAAC;IACjC,OAAO,GAAG,CAAC,EAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC3B,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,8BAA8B;QACvC,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IACH,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC;IACrC,IAAI,cAAc,KAAK,WAAW,IAAI,CAAC,cAAc,EAAE;QACrD,QAAQ,GAAG,MAAM,OAAO,CAAC;YACvB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,gCAAgC;SAC1C,CAAC,CAAC;QACH,2CAA2C;QAC3C,MAAM,eAAe,GAAG,SAAS,CAC/B,4BAA4B,QAAQ,CAAC,UAAU,EAAE,CAClD,CAAC,QAAQ,EAAE,CAAC;QACb,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAClB;KACF;IACD,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC;IACrC,IAAI,cAAc,EAAE;QAClB,SAAS,CAAC,4BAA4B,GAAG,cAAc,CAAC,CAAC;KAC1D;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,OAAe;IAC/B,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,OAAO,CAAC,CAAC,KAAgB,EAAE,EAAE;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;YACvB,iCAAiC;YACjC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;SAChD;aAAM;YACL,eAAe;YACf,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC1B;IACH,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CACvB,WAAmB,EACnB,OAAqB,EACrB,MAAc;IAEd,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE;QAChC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC9B,IAAI,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACzD,8FAA8F;YAC9F,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACpD,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,EAAE;gBACnB,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC9D;YACD,uBAAuB;YACvB,2EAA2E;YAC3E,yEAAyE;YACzE,+BAA+B;YAC/B,MAAM,EAAE,GAAG,8BAA8B,CAAC;YAC1C,MAAM,OAAO,GAAG,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;gBAC3B,IAAI,KAAK,CAAC,MAAM,EAAE;oBAChB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;iBACrC;aACF;SACF;KACF;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC5C,OAAO,EAAC,IAAI,EAAc,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,IACE,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EACxD;YACA,OAAO,CAAC,GAAG,CACT,0EAA0E,WAAW,UAAU,CAChG,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;gBACnB,KAAK,CAAC,IAAI,CACR,yFAAyF,CAC1F;gBACD,IAAI;gBACJ,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;gBACrB,KAAK,CAAC,IAAI,CACR,oHAAoH,CACrH,CACJ,CAAC;SACH;QACD,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;KACzC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,MAAM,CACnB,SAAsC,EACtC,OAAqB;IAErB,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACvC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,kCAAkC,CACzC,SAAiB,EACjB,WAAmB,EACnB,UAAkB,EAClB,UAAkB,EAClB,WAAmC;IAEnC,IAAI,GAAG,GAAG,mDAAmD,CAAC;IAC9D,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC9C,GAAG,IAAI,0BAA0B,SAAS,iBAAiB,WAAW,2BAA2B,CAAC;IAClG,IAAI,WAAW,EAAE;QACf,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,GAAG;gBACD,OAAO,KAAK,qBAAqB;oBACjC,OAAO,KAAK,mBAAmB,KAAK,EAAE;oBACtC,OAAO,KAAK,cAAc,UAAU,EAAE;oBACtC,OAAO,KAAK,cAAc,UAAU,EAAE;oBACtC,OAAO,KAAK,aAAa;oBACzB,OAAO,KAAK,YAAY,KAAK,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,6BAA6B,CAC1C,WAAmC;IAEnC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,SAAS,GAAuB;QACpC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,IAAI,GAAG,wDAAwD;SACzE;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,IAAI,GAAG,qEAAqE;YACrF,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB;SAChD;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,0CAA0C;YACnD,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB;SAChD;KACF,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,oBAAoB,EAAE;QAChC,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;KACrE;IACD,IAAI,OAAO,CAAC,qBAAqB,EAAE;QACjC,OAAO,MAAM,6BAA6B,CAAC,WAAW,CAAC,CAAC;KACzD;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,OAAqB,EACrB,UAAkB,EAClB,cAAsB,EACtB,QAA6B;IAE7B,MAAM,YAAY,GAAG,MAAM,MAAM,CAC/B;QACE;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,cAAc;YACpB,OAAO,EACL,oEAAoE;SACvE;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,+BAA+B;SACzC;KACF,EACD,OAAO,CACR,CAAC;IACF,oCAAoC;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC3C,MAAM,CACL,MAAM,CAAC,EAAE,CACP,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC;QACT,MAAM,CAAC,CAAC,CAAC,KAAK,cAAc,CAC/B;SACA,GAAG,CAAC,MAAM,CAAC,EAAE;QACZ,OAAO,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC;IAC9C,CAAC,CAAC;SACD,MAAM,CAAC,EAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAC,CAAC,CAAC;IAE1D,IAAI,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAC3C,IAAI,CAAC,UAAU,EAAE;QACf,iHAAiH;QACjH,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SACrC;aAAM;YACL,UAAU,GAAG,CACX,MAAM,OAAO,CAAC;gBACZ,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,qDAAqD;gBAC9D,OAAO,EAAE,aAAa;aACvB,CAAC,CACH,CAAC,iBAAiB,CAAC;SACrB;KACF;IAED,oFAAoF;IACpF,4FAA4F;IAC5F,IAAI,WAAW,GAAG,OAAO,CAAC,qBAAqB,IAAI,EAAE,CAAC;IACtD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QACzC,WAAW,GAAG,MAAM,6BAA6B,CAAC,WAAW,CAAC,CAAC;QAC/D,OAAO,CAAC,qBAAqB,GAAG,WAAW,CAAC;KAC7C;IACD,MAAM,aAAa,GAAG,kCAAkC,CACtD,YAAY,CAAC,YAAY,EACzB,YAAY,CAAC,cAAc,EAC3B,UAAU,EACV,UAAU,EACV,WAAW,CACZ,CAAC;IACF,OAAO,CAAC,GAAG,CACT,oKAAoK,CACrK,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;IACrD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,OAAqB;IAC9D,MAAM,0BAA0B,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,CACP,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;YAChC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAC3D,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAC9B;QACE;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EACL,uFAAuF;YACzF,OAAO,EAAE,IAAI;SACd;KACF,EACD,OAAO,CACR,CAAC;IACF,IAAI,wBAAwB,GAAG,EAAE,CAAC;IAClC,IAAI,WAAW,CAAC,oBAAoB,EAAE;QACpC,MAAM,WAAW,GAAG,MAAM,MAAM,CAC9B;YACE;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE,+BAA+B;gBACxC,OAAO,EAAE,0BAA0B,IAAI,iBAAiB;aACzD;SACF,EACD,OAAO,CACR,CAAC;QACF,wBAAwB,GAAG,WAAW,CAAC,wBAAwB,CAAC;QAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE;YAC5C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC;gBACpC,KAAK,CAAC,MAAM,CACV,gIAAgI,CACjI;gBACD,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAClC,CAAC;SACH;aAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,0IAA0I,CAC3I,CACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAClB;KACF;SAAM;QACL,kCAAkC;QAClC,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,MAAM,MAAM,CAC9B;YACE;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,kBAAkB;aAC5B;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,+BAA+B;gBACrC,OAAO,EAAE,sBAAsB;aAChC;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,iCAAiC;aAC3C;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,iBAAiB;aAC3B;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,wCAAwC;gBAC9C,qDAAqD;gBACrD,OAAO,EACL,iFAAiF;aACpF;SACF,EACD,OAAO,CACR,CAAC;QACF,IAAI,WAAW,CAAC,sCAAsC,EAAE;YACtD,MAAM,IAAI,GAAG,MAAM,oBAAoB,CACrC,WAAW,CAAC,yBAAyB,EACrC,WAAW,CAAC,6BAA6B,EACzC,yCAAyC,CAC1C,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC3C,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,aAAa,EAAE;gBACjB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;aACtD;SACF;aAAM;YACL,aAAa,GAAG,CACd,MAAM,MAAM,CACV;gBACE;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,+BAA+B;oBACrC,OAAO,EAAE,sBAAsB;iBAChC;aACF,EACD,OAAO,CACR,CACF,CAAC,6BAA6B,CAAC;SACjC;QAED,uGAAuG;QACvG,wBAAwB,GAAG,iBAAiB,CAAC;QAC7C,MAAM,YAAY,GAAG,gDAAgD,IAAI,IAAI,EAAE;mBAChE,WAAW,CAAC,yBAAyB;aAC3C,WAAW,CAAC,yBAAyB;iBACjC,WAAW,CAAC,6BAA6B;qBACrC,kBAAkB,CAAC,WAAW,CAAC,oBAAoB,CAAC;iBACxD,aAAa;KACzB,CAAC;QACF,EAAE,CAAC,aAAa,CAAC,wBAAwB,EAAE,YAAY,EAAE;YACvD,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CACT,4CAA4C,wBAAwB,EAAE,CACvE,CAAC;KACH;IACD,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,YAAoB,EACpB,wBAAgC;IAEhC,MAAM,QAAQ,CACZ,oBAAoB,EACpB,IAAI,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAC9C;QACE,GAAG,EAAE,KAAK,YAAY,KAAK;KAC5B,CACF,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,uCAAuC,wBAAwB,EAAE,EACjE,IAAI,IAAI,CAAC,OAAO,CACd,mCAAmC,wBAAwB,KAAK,CACjE,EACD,EAAC,GAAG,EAAE,KAAK,YAAY,KAAK,EAAC,CAC9B,CAAC;IACF,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KACxB;AACH,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,OAAO,GAAiB,EAAE,CAAC;IAC/B,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,8GAA8G;QAC9G,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;YACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,wEAAwE;gBACtE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAC/B,CACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAClB;QACD,IAAI,cAAc,CAAC;QACnB,IAAI;YACF,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACzD;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,OAAO,8BAA8B,CAAC,CACtE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAClB;QACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAC;KAC1D;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAoB;IAC9C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,YAAoB;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;QAChC,MAAM,QAAQ,CACZ,aAAa,GAAG,cAAc,YAAY,EAAE,EAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,6BAA6B,GAAG,mBAAmB,CAAC,CACtE,CAAC;KACH;SAAM;QACL,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI;YACF,aAAa,GAAG,SAAS,CAAC,4BAA4B,EAAE;gBACtD,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC;aAClC,CAAC;iBACC,QAAQ,EAAE;iBACV,IAAI,EAAE,CAAC;YACV,oCAAoC;SACrC;QAAC,OAAO,CAAU,EAAE;YACnB,qCAAqC;SACtC;QACD,IAAI,CAAC,aAAa,EAAE;YAClB,qFAAqF;YACrF,MAAM,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;YAC1E,MAAM,cAAc,GAClB,SAAS,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,kBAAkB,CAAC;YACxE,SAAS,CAAC,gCAAgC,aAAa,EAAE,EAAE;gBACzD,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC;aAClC,CAAC,CAAC;YACH,SAAS,CAAC,iCAAiC,cAAc,EAAE,EAAE;gBAC3D,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC;aAClC,CAAC,CAAC;SACJ;QACD,SAAS,CAAC,eAAe,EAAE,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,EAAC,CAAC,CAAC;KACjE;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAA6C;IAClE,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACxC,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC;QACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACtC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;gBAChB,OAAO,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;aACzC;SACF;KACF;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,8BAA8B,GAAG,EAAE,CAAC;IACvD,IAAI,QAAQ,EAAE;QACZ,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC;KAC5D;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAC,gBAAgB,EAAE,MAAM,EAAC,CAAC,CAAC,CAC5E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,wDAAwD,KAAK,CAAC,SAAS,CACrE,GAAG,CACJ,SAAS,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,SAAS,CACjD,GAAG,CACJ,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAC3E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,4FAA4F,CAC7F,CAAC;IACF,OAAO,CAAC,GAAG,CACT,6EAA6E,CAC9E,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAE7D,MAAM,gBAAgB,GAAG,aAAa,CAAC;IACvC,MAAM,eAAe,GAAG,YAAY,CAAC;IACrC,MAAM,IAAI,GAAG,CACX,MAAM,MAAM,CACV;QACE;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,MAAM;YACZ,OAAO,EACL,kEAAkE;YACpE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC3B,MAAM,EAAE,KAAK,CAAC,EAAE;gBACd,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzD,CAAC;SACF;KACF,EACD,OAAO,CACR,CACF,CAAC,IAAI,CAAC;IACP,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACpB,MAAM,6BAA6B,GAAG,EAAE;SACrC,WAAW,CAAC,GAAG,CAAC;SAChB,IAAI,CACH,CAAC,CAAC,EAAE,CACF,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC3E,CAAC;IACJ,MAAM,4BAA4B,GAAG,EAAE;SACpC,WAAW,CAAC,GAAG,CAAC;SAChB,IAAI,CACH,CAAC,CAAC,EAAE,CACF,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC1E,CAAC;IACJ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B;QACE;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,kDAAkD;YAC3D,OAAO,EAAE,6BAA6B,IAAI,gBAAgB;SAC3D;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,uDAAuD;YAChE,OAAO,EAAE,4BAA4B,IAAI,eAAe;SACzD;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,8BAA8B;YACvC,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,KAAK,CAAC,EAAE;gBACd,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;oBAC9B,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;oBACjC,CAAC,CAAC,KAAK,CAAC;YACZ,CAAC;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,iBAAiB;YACvB,OAAO,EACL,mEAAmE;SACtE;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EACL,qFAAqF;YACvF,OAAO,EAAE,EAAE;SACZ;KACF,EACD,OAAO,CACR,CAAC;IACF,MAAM,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;IACzD,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACpE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC;IACvD,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAClE,IAAI,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACrC,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;IAEjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE;QAC3C,EAAE,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,uBAAuB,UAAU,CAAC,CAAC,CAAC;KACxE;IACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE;QAC1C,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,sBAAsB,UAAU,CAAC,CAAC,CAAC;KACvE;IACD,MAAM,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB,CAAC;IAC7D,MAAM,wBAAwB,GAAG,MAAM,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAE5E,+DAA+D;IAC/D,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE;QAC/C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,uCAAuC,mBAAmB,UAAU,CACrE,CACF,CAAC;KACH;IACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE;QAC5C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,wCAAwC,wBAAwB,QAAQ,CACzE,CACF,CAAC;KACH;IAED,UAAU,GAAG,CAAC,UAAU,IAAI,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnD,mBAAmB;IACnB,MAAM,YAAY,GAAG,iBAAiB,CAAC;IACvC,MAAM,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE7C,+EAA+E;IAC/E,IACE,EAAE,CAAC,UAAU,CAAC,wBAAwB,CAAC;QACvC,CAAC,OAAO,CAAC,sBAAsB,EAC/B;QACA,MAAM,wBAAwB,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;KACxE;IAED,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAErD,kBAAkB;IAClB,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,gBAAgB,cAAc,CAAC,UAAU,CAAC,eAAe,UAAU,EAAE,EACrE,IAAI,IAAI,CAAC,OAAO,CAAC,yBAAyB,UAAU,EAAE,CAAC,EACvD,EAAC,MAAM,EAAE,IAAI,EAAC,CACf,CAAC;IACF,IACE,GAAG,CAAC,IAAI,KAAK,CAAC;QACd,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAClB,uDAAuD,UAAU,kBAAkB,CACpF,EACD;QACA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;KACvC;IACD,MAAM,aAAa,GAAG,QAAQ,UAAU,IAAI,IAAI,EAAE,CAAC;IAEnD,2BAA2B;IAC3B,IAAI,2BAA2B,GAAG,EAAE,CAAC;IACrC,IAAI,qBAAqB,CAAC;IAC1B,IAAI,qBAAqB,EAAE;QACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE;YACzC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,0BAA0B,qBAAqB,GAAG,CAAC,CAC9D,CAAC;SACH;QACD,qBAAqB,GAAG,GAAG,aAAa,mBAAmB,CAAC;QAC5D,2BAA2B,GAAG,gBAAgB,qBAAqB,kCAAkC,CAAC;KACvG;IACD,kDAAkD;IAClD,mBAAmB,CACjB,mBAAmB,EACnB;gBACY,aAAa;;YAEjB,wBAAwB;iBACnB,wBAAwB;;EAEvC,2BAA2B;;iCAEI,mBAAmB;UAC1C,mBAAmB;sBACP,mBAAmB,qBAAqB,gBAAgB;;;iCAG7C,kBAAkB;UACzC,kBAAkB;sBACN,kBAAkB,qBAAqB,eAAe;;CAE3E,CACE,CAAC;IAEF,sBAAsB;IACtB,MAAM,SAAS,GAAG,CAChB,MAAM,MAAM,CACV;QACE;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,uCAAuC;YAChD,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE;gBACP,OAAO;gBACP,OAAO;gBACP,OAAO;gBACP,QAAQ;gBACR,QAAQ;gBACR,QAAQ;gBACR,QAAQ;aACT;SACF;KACF,EACD,OAAO,CACR,CACF,CAAC,SAAS,CAAC;IACZ,uBAAuB;IACvB,MAAM,QAAQ,GAAwC;QACpD,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,UAAU;YAClB,iBAAiB,EAAE,eAAe;SACnC;QACD,SAAS,EAAE;YACT,MAAM,EAAE,SAAS;SAClB;KACF,CAAC;IACF,mBAAmB,CACjB,cAAc,EACd;;OAEG,YAAY;;;IAGf,YAAY,wDAAwD,aAAa;CACpF,CACE,CAAC;IAEF,4CAA4C;IAC5C,IAAI,eAAe,CAAC;IACpB,IAAI,EAAE,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE;QAC3C,MAAM,OAAO,GAAQ,CACnB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC,CAC9D,CAAC;QACF,kFAAkF;QAClF,eAAe;YACb,OAAO,CAAC,aAAa,CAAC;gBACtB,OAAO,CAAC,oBAAoB,CAAC;gBAC7B,OAAO,CAAC,mBAAmB,CAAC,CAAC;KAChC;IACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B;QACE;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,yDAAyD;YAClE,OAAO,EAAE,eAAe;SACzB;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,gBAAgB;YACtB,OAAO,EACL,0EAA0E;YAC5E,OAAO,EAAE,IAAI,GAAG,MAAM;YACtB,MAAM,CAAC,KAAK;gBACV,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACrC,CAAC;SACF;KACF,EACD,OAAO,CACR,CAAC;IAEF,+DAA+D;IAC/D,MAAM,SAAS,GAAG,MAAM,gBAAgB,CACtC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,EACnC,OAAO,EACP,WAAW,CACZ,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CACrC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAClC,OAAO,EACP,UAAU,CACX,CAAC;IACF,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACpD,MAAM,WAAW,GACf,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;IAC/C,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG;QACd,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,UAAU;QACpB,gBAAgB,EAAE,GAAG,IAAI,IAAI,gBAAgB,GAAG;QAChD,eAAe,EAAE,GAAG,IAAI,IAAI,eAAe,GAAG;QAC9C,OAAO,EAAE,cAAc;QACvB,GAAG,EAAE,WAAW;QAChB,eAAe,EAAE,GAAG,aAAa,kBAAkB;QACnD,kBAAkB,EAAE,qBAAqB;QACzC,mBAAmB,EAAE,WAAW;QAChC,iBAAiB,EAAE,iBAAiB;QACpC,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,QAAQ;KACnB,CAAC;IACF,MAAM,YAAY,GAAG,WAAW,CAAC;IACjC,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAEjE,mBAAmB;IACnB,mBAAmB,CACjB,WAAW,EACX;oEACgE,aAAa,8BAA8B,YAAY;CAC1H,CACE,CAAC;IAEF,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzD,2BAA2B;IAC3B,0CAA0C;IAC1C,IACE,CACE,MAAM,MAAM,CACV;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,gDAAgD;QACzD,OAAO,EAAE,IAAI;KACd,EACD,OAAO,CACR,CACF,CAAC,cAAc,EAChB;QACA,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,EAAE,IAAI,EAAE;YACtE,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE;YACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CACrE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACxB;KACF;SAAM;QACL,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,+GAA+G,CAChH,CACF,CAAC;KACH;IAED,IACE,CACE,MAAM,MAAM,CACV;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,yCAAyC;QAClD,OAAO,EAAE,IAAI;KACd,EACD,OAAO,CACR,CACF,CAAC,SAAS,EACX;QACA,2BAA2B;QAC3B,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAChC,IAAI,IAAI,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAC/D,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE;YACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC,CACzE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACxB;KACF;SAAM;QACL,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,gHAAgH,CACjH,CACF,CAAC;KACH;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,uDAAuD;QAChE,OAAO,EAAE,IAAI;KACd,EACD,OAAO,CACR,CAAC;IACF,IAAI,aAAa,GAAG,WAAW,CAAC;IAChC,IAAI,QAAQ,CAAC,WAAW,EAAE;QACxB,MAAM,gBAAgB,GAAG,MAAM,MAAM,CACnC;YACE;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,sCAAsC;gBAC/C,OAAO,EAAE,OAAO;gBAChB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAC1B,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI;aACtE;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,2DAA2D;aACrE;SACF,EACD,OAAO,CACR,CAAC;QACF,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7D,aAAa,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAC1D,UAAU,CAAC,CAAC,CACd,QAAQ,CAAC;QACT,QAAQ,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;KAC7C;IAED,QAAQ,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACpD,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC;IAClD,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzD,wBAAwB;IACxB,mBAAmB,CACjB,gBAAgB,EAChB;IACA,YAAY,yDAAyD,aAAa,8BAA8B,YAAY;CAC/H,CACE,CAAC;IAEF,IAAI,QAAQ,CAAC,WAAW,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAClC,IAAI,IAAI,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAC7D,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE;YAClB,OAAO,CAAC,GAAG,CACT,gGAAgG,CACjG,CAAC;SACH;QAED,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpB,kBAAkB;YAClB,MAAM,aAAa,GAAG,IAAI,GAAG,KAAK,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,6BAA6B,aAAa,eAAe,UAAU,EAAE,EACrE,IAAI,EACJ,EAAC,QAAQ,EAAE,IAAI,EAAC,CACjB,CAAC;YACF,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE;gBACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAC7D,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACxB;SACF;KACF;IACD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACrB,6HAA6H;QAC7H,MAAM,UAAU,GAAG,MAAM,MAAM,CAC7B;YACE;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EACL,+DAA+D;aAClE;SACF,EACD,OAAO,CACR,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE;gBAC9D,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE;gBACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAC/D,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACxB;SACF;KACF;IAED,gDAAgD;IAChD,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;SAC/C,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,mBAAmB,CACjB,sBAAsB,EACtB,GAAG,YAAY,aAAa,mBAAmB,oBAAoB,WAAW,iBAAiB,wBAAwB,gDAAgD,gBAAgB,EAAE,CAC1L,CAAC;IACF,mBAAmB,CACjB,cAAc,EACd,GAAG,YAAY,aAAa,mBAAmB,oBAAoB,WAAW,iBAAiB,wBAAwB,6BAA6B,cAAc,iBAAiB,cAAc,IAAI,gBAAgB,EAAE,CACxN,CAAC;IACF,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC7C,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,mBAAmB,CACjB,iBAAiB,EACjB,GAAG,YAAY,gBAAgB,kBAAkB,oBAAoB,cAAc,IAAI,eAAe,EAAE,CACzG,CAAC;IAEF,kBAAkB;IAClB,IACE,CACE,MAAM,MAAM,CACV;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,iDAAiD;QAC1D,OAAO,EAAE,KAAK;KACf,EACD,OAAO,CACR,CACF,CAAC,eAAe,EACjB;QACA,MAAM,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QAC1E,MAAM,QAAQ,CACZ,aAAa,mBAAmB,IAAI,aAAa,GAAG,EACpD,IAAI,IAAI,CAAC,OAAO,CACd,WAAW,mBAAmB,WAAW,aAAa,GAAG,CAC1D,EACD,EAAC,MAAM,EAAE,IAAI,EAAC,CACf,CAAC;KACH;IAED,oIAAoI;IACpI,MAAM,QAAQ,CACZ,qBAAqB,aAAa,0BAA0B,aAAa,IAAI,aAAa,0BAA0B,YAAY,IAAI,aAAa,WAAW,EAC5J,IAAI,IAAI,CAAC,OAAO,CACd,oCAAoC,aAAa,UAAU,CAC5D,EACD,EAAC,MAAM,EAAE,IAAI,EAAC,CACf,CAAC;IACF,2EAA2E;IAC3E,mBAAmB,CACjB,qBAAqB,EACrB;;;;eAIW,aAAa;eACb,aAAa,YAAY,aAAa;eACtC,aAAa,YAAY,YAAY;CACnD,CACE,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,oDAAoD,KAAK,CAAC,IAAI,CAC5D,aAAa,GAAG,UAAU,CAC3B,EAAE,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAErC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,IAAI,CACf,mBAAmB,CACpB,gDAAgD,CAClD,CAAC;IACF,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,0CAA0C,CAC5E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,IAAI,CACf,WAAW,CACZ,kDAAkD,YAAY,EAAE,CAClE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,IAAI,CACf,gBAAgB,CACjB,sDAAsD,YAAY,EAAE,CACtE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,IAAI,CACf,gBAAgB,CACjB,oEAAoE,CACtE,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;IAClD,IAAI,WAAW,EAAE;QACf,MAAM,WAAW,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC;QACxE,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,WAAW,EAAE,CAAC,CAAC,CAAC;KAC9D;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gcp/create-gaarf-wf/package-lock.json b/gcp/create-gaarf-wf/package-lock.json index a29164c3..c4f0f228 100644 --- a/gcp/create-gaarf-wf/package-lock.json +++ b/gcp/create-gaarf-wf/package-lock.json @@ -1,12 +1,12 @@ { "name": "create-gaarf-wf", - "version": "1.11.1", + "version": "1.11.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "create-gaarf-wf", - "version": "1.11.1", + "version": "1.11.2", "license": "Apache-2.0", "dependencies": { "chalk": "^5.0.1", diff --git a/gcp/create-gaarf-wf/package.json b/gcp/create-gaarf-wf/package.json index 675c27ae..9a9d5913 100644 --- a/gcp/create-gaarf-wf/package.json +++ b/gcp/create-gaarf-wf/package.json @@ -1,6 +1,6 @@ { "name": "create-gaarf-wf", - "version": "1.11.1", + "version": "1.11.2", "description": "Interactive generator for Gaarf (Google Ads API Report Fetcher) Workflow", "type": "module", "bin": { diff --git a/gcp/create-gaarf-wf/src/index.ts b/gcp/create-gaarf-wf/src/index.ts index 572bd75c..96a6d1f0 100644 --- a/gcp/create-gaarf-wf/src/index.ts +++ b/gcp/create-gaarf-wf/src/index.ts @@ -1058,7 +1058,7 @@ cd .. answers, 'bq_macro' ); - const bq_writer_options = answers.bq_writer_options; + const writer_options = answers.writer_options; const bq_location = gcp_region && gcp_region.startsWith('europe') ? 'europe' : ''; const output_dataset = answers2.output_dataset; @@ -1074,7 +1074,7 @@ cd .. ads_config_path: `${gcs_base_path}/google-ads.yaml`, customer_ids_query: custom_query_gcs_path, bq_dataset_location: bq_location, - bq_writer_options: bq_writer_options, + writer_options: writer_options, ads_macro: macro_ads, bq_macro: macro_bq, }; @@ -1086,6 +1086,7 @@ cd .. 'run-wf.sh', `set -e ./ads-api-fetcher/gcp/setup.sh run_wf --settings $(readlink -f "./${settings_file}") --data $(readlink -f "./${wf_data_file}") +#./ads-api-fetcher/gcp/setup.sh run_job --settings $(readlink -f "./${settings_file}") ` ); diff --git a/gcp/functions/build/src/gaarf-bq-view.js b/gcp/functions/build/src/gaarf-bq-view.js index d41bda8a..2d88be87 100644 --- a/gcp/functions/build/src/gaarf-bq-view.js +++ b/gcp/functions/build/src/gaarf-bq-view.js @@ -45,9 +45,16 @@ async function main_bq_view_unsafe(req, res, projectId, logger) { res.end(); } const main_bq_view = async (req, res) => { + (0, utils_1.setLogLevel)(req); + const dumpMemory = !!(req.query.dump_memory || process.env.DUMP_MEMORY); const projectId = await (0, utils_1.getProject)(); const logger = (0, logger_1.createLogger)(req, projectId, process.env.K_SERVICE || 'gaarf-bq'); await logger.info('request', { body: req.body, query: req.query }); + let dispose; + if (dumpMemory) { + logger.info((0, google_ads_api_report_fetcher_1.getMemoryUsage)('Start')); + dispose = (0, utils_1.startPeriodicMemoryLogging)(logger, 60000); + } try { await main_bq_view_unsafe(req, res, projectId, logger); } @@ -56,6 +63,13 @@ const main_bq_view = async (req, res) => { await logger.error(e.message, { error: e }); res.status(500).send(e.message).end(); } + finally { + if (dumpMemory) { + if (dispose) + dispose(); + logger.info((0, google_ads_api_report_fetcher_1.getMemoryUsage)('End')); + } + } }; exports.main_bq_view = main_bq_view; //# sourceMappingURL=gaarf-bq-view.js.map \ No newline at end of file diff --git a/gcp/functions/build/src/gaarf-bq-view.js.map b/gcp/functions/build/src/gaarf-bq-view.js.map index 68642230..256164b5 100644 --- a/gcp/functions/build/src/gaarf-bq-view.js.map +++ b/gcp/functions/build/src/gaarf-bq-view.js.map @@ -1 +1 @@ -{"version":3,"file":"gaarf-bq-view.js","sourceRoot":"","sources":["../../src/gaarf-bq-view.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;GAcG;AACH,0DAA6B;AAC7B,iFAA+D;AAI/D,qCAA+C;AAC/C,mCAAmC;AAEnC,KAAK,UAAU,mBAAmB,CAChC,GAAoB,EACpB,GAAqB,EACrB,SAAiB,EACjB,MAAe;IAEf,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAE/B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IAC5C,gEAAgE;IAChE,MAAM,OAAO,GAA4B;QACvC,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB;KACrE,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,gDAAgB,CAAS,SAAS,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;IAC7D,IAAI,UAAU,IAAI,CAAC,OAAO,EAAE;QAC1B,OAAO,GAAG,mBAAI,CAAC,QAAQ,CAAS,UAAU,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9D;IACD,MAAM,MAAM,CAAC,IAAI,CACf,4BAA4B,SAAS,IAAI,OAAO,QAAQ,QAAQ,CAAC,MAAM,WAAW,CACnF,CAAC;IACF,MAAM,QAAQ,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/D,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpB,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC;AAEM,MAAM,YAAY,GAAiB,KAAK,EAC7C,GAAoB,EACpB,GAAqB,EACrB,EAAE;IACF,MAAM,SAAS,GAAG,MAAM,IAAA,kBAAU,GAAE,CAAC;IACrC,MAAM,MAAM,GAAG,IAAA,qBAAY,EACzB,GAAG,EACH,SAAS,EACT,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,UAAU,CACpC,CAAC;IACF,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAC,CAAC,CAAC;IAEjE,IAAI;QACF,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;KACxD;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;KACvC;AACH,CAAC,CAAC;AAnBW,QAAA,YAAY,gBAmBvB"} \ No newline at end of file +{"version":3,"file":"gaarf-bq-view.js","sourceRoot":"","sources":["../../src/gaarf-bq-view.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;GAcG;AACH,0DAA6B;AAC7B,iFAA+E;AAI/E,qCAA+C;AAC/C,mCAA4E;AAE5E,KAAK,UAAU,mBAAmB,CAChC,GAAoB,EACpB,GAAqB,EACrB,SAAiB,EACjB,MAAe;IAEf,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAE/B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IAC5C,gEAAgE;IAChE,MAAM,OAAO,GAA4B;QACvC,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB;KACrE,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,gDAAgB,CAAS,SAAS,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;IAC7D,IAAI,UAAU,IAAI,CAAC,OAAO,EAAE;QAC1B,OAAO,GAAG,mBAAI,CAAC,QAAQ,CAAS,UAAU,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9D;IACD,MAAM,MAAM,CAAC,IAAI,CACf,4BAA4B,SAAS,IAAI,OAAO,QAAQ,QAAQ,CAAC,MAAM,WAAW,CACnF,CAAC;IACF,MAAM,QAAQ,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/D,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpB,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC;AAEM,MAAM,YAAY,GAAiB,KAAK,EAC7C,GAAoB,EACpB,GAAqB,EACrB,EAAE;IACF,IAAA,mBAAW,EAAC,GAAG,CAAC,CAAC;IACjB,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,MAAM,IAAA,kBAAU,GAAE,CAAC;IACrC,MAAM,MAAM,GAAG,IAAA,qBAAY,EACzB,GAAG,EACH,SAAS,EACT,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,UAAU,CACpC,CAAC;IACF,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAC,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC;IACZ,IAAI,UAAU,EAAE;QACd,MAAM,CAAC,IAAI,CAAC,IAAA,8CAAc,EAAC,OAAO,CAAC,CAAC,CAAC;QACrC,OAAO,GAAG,IAAA,kCAA0B,EAAC,MAAM,EAAE,KAAM,CAAC,CAAC;KACtD;IAED,IAAI;QACF,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;KACxD;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;KACvC;YAAS;QACR,IAAI,UAAU,EAAE;YACd,IAAI,OAAO;gBAAE,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,IAAA,8CAAc,EAAC,KAAK,CAAC,CAAC,CAAC;SACpC;KACF;AACH,CAAC,CAAC;AA/BW,QAAA,YAAY,gBA+BvB"} \ No newline at end of file diff --git a/gcp/functions/build/src/gaarf-bq.js b/gcp/functions/build/src/gaarf-bq.js index f52a93f8..8d0686a0 100644 --- a/gcp/functions/build/src/gaarf-bq.js +++ b/gcp/functions/build/src/gaarf-bq.js @@ -40,9 +40,16 @@ async function main_bq_unsafe(req, res, projectId, logger) { } } const main_bq = async (req, res) => { + (0, utils_1.setLogLevel)(req); + const dumpMemory = !!(req.query.dump_memory || process.env.DUMP_MEMORY); const projectId = await (0, utils_1.getProject)(); const logger = (0, logger_1.createLogger)(req, projectId, process.env.K_SERVICE || 'gaarf-bq'); await logger.info('request', { body: req.body, query: req.query }); + let dispose; + if (dumpMemory) { + logger.info((0, google_ads_api_report_fetcher_1.getMemoryUsage)('Start')); + dispose = (0, utils_1.startPeriodicMemoryLogging)(logger, 60000); + } try { await main_bq_unsafe(req, res, projectId, logger); } @@ -51,6 +58,13 @@ const main_bq = async (req, res) => { await logger.error(e.message, { error: e }); res.status(500).send(e.message).end(); } + finally { + if (dumpMemory) { + if (dispose) + dispose(); + logger.info((0, google_ads_api_report_fetcher_1.getMemoryUsage)('End')); + } + } }; exports.main_bq = main_bq; //# sourceMappingURL=gaarf-bq.js.map \ No newline at end of file diff --git a/gcp/functions/build/src/gaarf-bq.js.map b/gcp/functions/build/src/gaarf-bq.js.map index b30d3117..17b83356 100644 --- a/gcp/functions/build/src/gaarf-bq.js.map +++ b/gcp/functions/build/src/gaarf-bq.js.map @@ -1 +1 @@ -{"version":3,"file":"gaarf-bq.js","sourceRoot":"","sources":["../../src/gaarf-bq.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;GAcG;AACH,iFAA+D;AAG/D,mCAA8C;AAE9C,qCAA+C;AAE/C,KAAK,UAAU,cAAc,CAC3B,GAAoB,EACpB,GAAqB,EACrB,SAAiB,EACjB,MAAe;IAEf,MAAM,OAAO,GAA4B;QACvC,eAAe,EAAU,GAAG,CAAC,KAAK,CAAC,gBAAgB;KACpD,CAAC;IACF,MAAM,EAAC,SAAS,EAAE,UAAU,EAAC,GAAG,MAAM,IAAA,iBAAS,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAI,gDAAgB,CAAS,SAAS,EAAE,OAAO,CAAC,CAAC;IAElE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;IAE/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE;QAC3D,SAAS;QACT,WAAW;KACZ,CAAC,CAAC;IACH,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;QAC3B,GAAG,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,CAAC;KACrC;SAAM;QACL,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACrB;AACH,CAAC;AAEM,MAAM,OAAO,GAAiB,KAAK,EACxC,GAAoB,EACpB,GAAqB,EACrB,EAAE;IACF,MAAM,SAAS,GAAG,MAAM,IAAA,kBAAU,GAAE,CAAC;IACrC,MAAM,MAAM,GAAG,IAAA,qBAAY,EACzB,GAAG,EACH,SAAS,EACT,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,UAAU,CACpC,CAAC;IACF,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAC,CAAC,CAAC;IAEjE,IAAI;QACF,MAAM,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;KACnD;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;KACvC;AACH,CAAC,CAAC;AAnBW,QAAA,OAAO,WAmBlB"} \ No newline at end of file +{"version":3,"file":"gaarf-bq.js","sourceRoot":"","sources":["../../src/gaarf-bq.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;GAcG;AACH,iFAA+E;AAG/E,mCAKiB;AAEjB,qCAA+C;AAE/C,KAAK,UAAU,cAAc,CAC3B,GAAoB,EACpB,GAAqB,EACrB,SAAiB,EACjB,MAAe;IAEf,MAAM,OAAO,GAA4B;QACvC,eAAe,EAAU,GAAG,CAAC,KAAK,CAAC,gBAAgB;KACpD,CAAC;IACF,MAAM,EAAC,SAAS,EAAE,UAAU,EAAC,GAAG,MAAM,IAAA,iBAAS,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAI,gDAAgB,CAAS,SAAS,EAAE,OAAO,CAAC,CAAC;IAElE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;IAE/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE;QAC3D,SAAS;QACT,WAAW;KACZ,CAAC,CAAC;IACH,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;QAC3B,GAAG,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,CAAC;KACrC;SAAM;QACL,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACrB;AACH,CAAC;AAEM,MAAM,OAAO,GAAiB,KAAK,EACxC,GAAoB,EACpB,GAAqB,EACrB,EAAE;IACF,IAAA,mBAAW,EAAC,GAAG,CAAC,CAAC;IACjB,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,MAAM,IAAA,kBAAU,GAAE,CAAC;IACrC,MAAM,MAAM,GAAG,IAAA,qBAAY,EACzB,GAAG,EACH,SAAS,EACT,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,UAAU,CACpC,CAAC;IACF,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAC,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC;IACZ,IAAI,UAAU,EAAE;QACd,MAAM,CAAC,IAAI,CAAC,IAAA,8CAAc,EAAC,OAAO,CAAC,CAAC,CAAC;QACrC,OAAO,GAAG,IAAA,kCAA0B,EAAC,MAAM,EAAE,KAAM,CAAC,CAAC;KACtD;IAED,IAAI;QACF,MAAM,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;KACnD;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;KACvC;YAAS;QACR,IAAI,UAAU,EAAE;YACd,IAAI,OAAO;gBAAE,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,IAAA,8CAAc,EAAC,KAAK,CAAC,CAAC,CAAC;SACpC;KACF;AACH,CAAC,CAAC;AA/BW,QAAA,OAAO,WA+BlB"} \ No newline at end of file diff --git a/gcp/functions/build/src/gaarf-getcids.js b/gcp/functions/build/src/gaarf-getcids.js index 3f684bf1..f6126517 100644 --- a/gcp/functions/build/src/gaarf-getcids.js +++ b/gcp/functions/build/src/gaarf-getcids.js @@ -2,7 +2,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.main_getcids = void 0; /** - * Copyright 2022 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,22 @@ exports.main_getcids = void 0; * See the License for the specific language governing permissions and * limitations under the License. */ +/** + * Cloud Function 'gaarf-getids' - executes Ads query (suplied either via body or as a GCS path) and writes data to BigQuery + * arguments: +* `ads_config_path` - a path to Ads config, same as for gaarf +* `customer_id` - a seed customer id (CID), without '-'; + can be specified in google-ads.yaml as well, if so then can be omitted +* `customer_ids_query` - custom Ads query to filter customer accounts expanded from `customer_id`, + same as same-name argument for gaarf cli tool. Query's first column should be a customer id (CID). +* `customer_ids_ignore` - a list of customer ids to exclude from the result +* `customer_ids_batchsize` - a size of batches into which account ids list will be split. +* `customer_ids_offset` - an offset in the customer ids list resulted from the seed CIDs and + optional query in `customer_ids_query`, it allows to implement an external batching. +* `flatten` - flatten the list of customer ids. If `customer_ids_offset` is provided then + the list will be a subset of CIDs otherwise it will be the whole list of accounts, + ignoring batching (regadless of the customer_ids_batchsize's value). + **/ const google_ads_api_report_fetcher_1 = require("google-ads-api-report-fetcher"); const utils_1 = require("./utils"); const logger_1 = require("./logger"); @@ -36,6 +52,7 @@ async function main_getcids_unsafe(req, res, logger) { else { customerIdsIgnore = [customerIdsIgnoreQS]; } + customerIdsIgnore = customerIdsIgnore.map(v => v.trim()); } if (!customerIds || customerIds.length === 0) { throw new Error("Customer id is not specified in either 'customer_id' query argument or google-ads.yaml"); @@ -43,8 +60,15 @@ async function main_getcids_unsafe(req, res, logger) { if (!adsConfig.login_customer_id && customerIds && customerIds.length === 1) { adsConfig.login_customer_id = customerIds[0]; } - const adsClient = new google_ads_api_report_fetcher_1.GoogleAdsApiClient(adsConfig); - customerIds = await adsClient.getCustomerIds(customerIds); + let adsClient; + if (req.query.api === 'rest') { + const apiVersion = req.query.apiVersion; + adsClient = new google_ads_api_report_fetcher_1.GoogleAdsRestApiClient(adsConfig, apiVersion); + } + else { + adsClient = new google_ads_api_report_fetcher_1.GoogleAdsRpcApiClient(adsConfig); + } + customerIds = await (0, google_ads_api_report_fetcher_1.getCustomerIds)(adsClient, customerIds); let customer_ids_query = ''; if (req.body && req.body.customer_ids_query) { customer_ids_query = req.body.customer_ids_query; @@ -54,8 +78,7 @@ async function main_getcids_unsafe(req, res, logger) { } if (customer_ids_query) { await logger.info(`Fetching customer id using custom query: ${customer_ids_query}`); - const executor = new google_ads_api_report_fetcher_1.AdsQueryExecutor(adsClient); - customerIds = await executor.getCustomerIds(customerIds, customer_ids_query); + customerIds = await (0, google_ads_api_report_fetcher_1.filterCustomerIds)(adsClient, customerIds, customer_ids_query); await logger.info(`Loaded ${customerIds.length} accounts`); } customerIds = customerIds || []; @@ -98,9 +121,16 @@ async function main_getcids_unsafe(req, res, logger) { } } const main_getcids = async (req, res) => { + (0, utils_1.setLogLevel)(req); + const dumpMemory = !!(req.query.dump_memory || process.env.DUMP_MEMORY); const projectId = await (0, utils_1.getProject)(); const logger = (0, logger_1.createLogger)(req, projectId, process.env.K_SERVICE || 'gaarf-getcids'); await logger.info('request', { body: req.body, query: req.query }); + let dispose; + if (dumpMemory) { + logger.info((0, google_ads_api_report_fetcher_1.getMemoryUsage)('Start')); + dispose = (0, utils_1.startPeriodicMemoryLogging)(logger, 60000); + } try { await main_getcids_unsafe(req, res, logger); } @@ -108,6 +138,13 @@ const main_getcids = async (req, res) => { await logger.error(e.message, { error: e }); res.status(500).send(e.message).end(); } + finally { + if (dumpMemory) { + if (dispose) + dispose(); + logger.info((0, google_ads_api_report_fetcher_1.getMemoryUsage)('End')); + } + } }; exports.main_getcids = main_getcids; //# sourceMappingURL=gaarf-getcids.js.map \ No newline at end of file diff --git a/gcp/functions/build/src/gaarf-getcids.js.map b/gcp/functions/build/src/gaarf-getcids.js.map index 9fcb9cb7..9c7d9953 100644 --- a/gcp/functions/build/src/gaarf-getcids.js.map +++ b/gcp/functions/build/src/gaarf-getcids.js.map @@ -1 +1 @@ -{"version":3,"file":"gaarf-getcids.js","sourceRoot":"","sources":["../../src/gaarf-getcids.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gaarf-getcids.js","sourceRoot":"","sources":["../../src/gaarf-getcids.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gcp/functions/build/src/gaarf.d.ts b/gcp/functions/build/src/gaarf.d.ts index 03803568..120703b0 100644 --- a/gcp/functions/build/src/gaarf.d.ts +++ b/gcp/functions/build/src/gaarf.d.ts @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/gcp/functions/build/src/gaarf.js b/gcp/functions/build/src/gaarf.js index d85daa5b..cb61c23b 100644 --- a/gcp/functions/build/src/gaarf.js +++ b/gcp/functions/build/src/gaarf.js @@ -1,6 +1,6 @@ "use strict"; /** - * Copyright 2022 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,72 +17,103 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.main = void 0; /** - * Cloud Function 'gaarf' - executes Ads query (suplied either via body or as gcs path) and writes data to BigQuery + * Cloud Function 'gaarf' - executes Ads query (suplied either via body or as a GCS path) and writes data to BigQuery (or other writer) * arguments: - * - (required) ads config - different sources are supported, see `getAdsConfig` fucntion - * - (required) bq_dataset - (can be taken from envvar DATASET) output BQ dataset id + * - (required) ads config - different sources are supported, see `getAdsConfig` function + * - writer - writer to use: "bq", "json", "csv". By default - "bq" (BigQuery) + * - bq_dataset - (can be taken from envvar DATASET) output BQ dataset id * - bq_project_id - BigQuery project id, be default the current project is used * - customer_id - Ads customer id (a.k.a. CID), can be taken from google-ads.yaml if specified - * - single_customer - true for skipping loading of subaccount, assuming the supplied CID is a leaf one (not MCC) + * - expand_mcc - true to expand account in `customer_id` argument. By default (if fale) it also disables creating union views. * - bq_dataset_location - BigQuery dataset location ('us' or 'europe'), optional, by default 'us' is used + * - output_path - output path for interim data (for BigQueryWriter) or generated data (Csv/Json writers) */ const google_ads_api_report_fetcher_1 = require("google-ads-api-report-fetcher"); const utils_1 = require("./utils"); const logger_1 = require("./logger"); +function getQueryWriter(req, projectId) { + var _a, _b, _c, _d, _e, _f; + const body = req.body || {}; + if (!req.query.writer || req.query.writer === 'bq') { + const bqWriterOptions = { + datasetLocation: req.query.bq_dataset_location, + arrayHandling: (_a = body.writer_options) === null || _a === void 0 ? void 0 : _a.array_handling, + arraySeparator: (_b = body.writer_options) === null || _b === void 0 ? void 0 : _b.array_separator, + outputPath: req.query.output_path || `gs://${projectId}/tmp`, + noUnionView: true, + }; + if (req.query.expand_mcc) { + bqWriterOptions.noUnionView = false; + } + const dataset = req.query.bq_dataset || process.env.DATASET; + if (!dataset) + throw new Error("Dataset is not specified in either 'bq_dataset' query argument or DATASET envvar"); + const writer = new google_ads_api_report_fetcher_1.BigQueryWriter(projectId, dataset, bqWriterOptions); + return writer; + } + if (req.query.writer === 'csv') { + const options = { + quoted: (_c = body.writer_options) === null || _c === void 0 ? void 0 : _c.quoted, + arraySeparator: (_d = body.writer_options) === null || _d === void 0 ? void 0 : _d.array_separator, + outputPath: req.query.output_path || `gs://${projectId}/tmp`, + }; + return new google_ads_api_report_fetcher_1.CsvWriter(options); + } + if (req.query.writer === 'json') { + const options = { + format: (_e = body.writer_options) === null || _e === void 0 ? void 0 : _e.format, + valueFormat: (_f = body.writer_options) === null || _f === void 0 ? void 0 : _f.value_format, + outputPath: req.query.output_path || `gs://${projectId}/tmp`, + }; + return new google_ads_api_report_fetcher_1.JsonWriter(options); + } +} async function main_unsafe(req, res, projectId, logger, functionName) { - var _a, _b; // prepare Ads API parameters const adsConfig = await (0, utils_1.getAdsConfig)(req); projectId = req.query.bq_project_id || process.env.PROJECT_ID || projectId; - const dataset = req.query.bq_dataset || process.env.DATASET; - if (!dataset) - throw new Error("Dataset is not specified in either 'bq_dataset' query argument or DATASET envvar"); const customerId = req.query.customer_id || adsConfig.customer_id; if (!customerId) throw new Error("Customer id is not specified in either 'customer_id' query argument or google-ads.yaml"); if (!adsConfig.login_customer_id) { adsConfig.login_customer_id = customerId; } - const ads_client = new google_ads_api_report_fetcher_1.GoogleAdsApiClient(adsConfig); - // TODO: support CsvWriter and output path to GCS - // (csv.destination_folder=gs://bucket/path) - const singleCustomer = req.query.single_customer; - const body = req.body || {}; - const macroParams = body.macro; - const bq_writer_options = { - datasetLocation: req.query.bq_dataset_location, - arrayHandling: (_a = body.bq_writer_options) === null || _a === void 0 ? void 0 : _a.array_handling, - arraySeparator: (_b = body.bq_writer_options) === null || _b === void 0 ? void 0 : _b.array_separator, - }; + let adsClient; + if (req.query.api === 'rest') { + const apiVersion = req.query.apiVersion; + adsClient = new google_ads_api_report_fetcher_1.GoogleAdsRestApiClient(adsConfig, apiVersion); + } + else { + adsClient = new google_ads_api_report_fetcher_1.GoogleAdsRpcApiClient(adsConfig); + } const { queryText, scriptName } = await (0, utils_1.getScript)(req, logger); // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars const { refresh_token, developer_token, ...ads_config_wo_token } = (adsConfig); - ads_config_wo_token['ApiVersion'] = google_ads_api_report_fetcher_1.AdsApiVersion; - await logger.info(`Running Cloud Function ${functionName}, Ads API ${google_ads_api_report_fetcher_1.AdsApiVersion}, ${singleCustomer - ? 'without MCC expansion (CID=' + customerId + ')' - : 'with MCC expansion (MCC=' + customerId + ')'}, see Ads API config in metadata field`, { + ads_config_wo_token['ApiVersion'] = adsClient.apiVersion; + await logger.info(`Running Cloud Function ${functionName}, Ads API ${adsClient.apiType} ${adsClient.apiVersion}, ${req.query.expand_mcc + ? 'with MCC expansion (MCC=' + customerId + ')' + : 'CID=' + customerId}, see Ads API config in metadata field`, { adsConfig: ads_config_wo_token, scriptName, customerId, request: { body: req.body, query: req.query }, }); let customers; - if (singleCustomer) { - customers = [customerId]; - bq_writer_options.noUnionView = true; - } - else { - customers = await ads_client.getCustomerIds(customerId); + if (req.query.expand_mcc) { + customers = await (0, google_ads_api_report_fetcher_1.getCustomerIds)(adsClient, customerId); await logger.info(`[${scriptName}] Customers to process (${customers.length})`, { customerId, scriptName, customers, }); } - const executor = new google_ads_api_report_fetcher_1.AdsQueryExecutor(ads_client); - const writer = new google_ads_api_report_fetcher_1.BigQueryWriter(projectId, dataset, bq_writer_options); - const result = await executor.execute(scriptName, queryText, customers, macroParams, writer); + else { + customers = [customerId]; + } + const executor = new google_ads_api_report_fetcher_1.AdsQueryExecutor(adsClient); + const writer = getQueryWriter(req, projectId); + const result = await executor.execute(scriptName, queryText, customers, req.body.macro, writer); await logger.info(`Cloud Function ${functionName} compeleted`, { customerId, scriptName, @@ -93,17 +124,35 @@ async function main_unsafe(req, res, projectId, logger, functionName) { res.end(); } const main = async (req, res) => { + (0, utils_1.setLogLevel)(req); + const dumpMemory = !!(req.query.dump_memory || process.env.DUMP_MEMORY); const projectId = await (0, utils_1.getProject)(); const functionName = process.env.K_SERVICE || 'gaarf'; const logger = (0, logger_1.createLogger)(req, projectId, functionName); + let dispose; + if (dumpMemory) { + logger.info((0, google_ads_api_report_fetcher_1.getMemoryUsage)('Start')); + dispose = (0, utils_1.startPeriodicMemoryLogging)(logger, 60000); + } try { await main_unsafe(req, res, projectId, logger, functionName); } catch (e) { console.log(e); - await logger.error(e.message, { error: e, body: req.body, query: req.query }); + await logger.error(e.message, { + error: e, + body: req.body, + query: req.query, + }); res.status(500).send(e.message).end(); } + finally { + if (dumpMemory) { + if (dispose) + dispose(); + logger.info((0, google_ads_api_report_fetcher_1.getMemoryUsage)('End')); + } + } }; exports.main = main; //# sourceMappingURL=gaarf.js.map \ No newline at end of file diff --git a/gcp/functions/build/src/gaarf.js.map b/gcp/functions/build/src/gaarf.js.map index 29031870..ad5c7e7b 100644 --- a/gcp/functions/build/src/gaarf.js.map +++ b/gcp/functions/build/src/gaarf.js.map @@ -1 +1 @@ -{"version":3,"file":"gaarf.js","sourceRoot":"","sources":["../../src/gaarf.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gaarf.js","sourceRoot":"","sources":["../../src/gaarf.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gcp/functions/build/src/utils.d.ts b/gcp/functions/build/src/utils.d.ts index afb07b4a..699a71b4 100644 --- a/gcp/functions/build/src/utils.d.ts +++ b/gcp/functions/build/src/utils.d.ts @@ -8,3 +8,11 @@ export declare function getScript(req: express.Request, logger: ILogger): Promis export declare function getAdsConfig(req: express.Request): Promise; export declare function getProject(): Promise; export declare function splitIntoChunks(array: Array, max: number): any[][]; +export declare function setLogLevel(req: express.Request): void; +/** + * Start a periodic logging of memory usage in backgroung. + * @param logger logger to write to + * @param intervalMs interval in milliseconds + * @returns a callback to call for stopping logging + */ +export declare function startPeriodicMemoryLogging(logger: ILogger, intervalMs?: number): () => void; diff --git a/gcp/functions/build/src/utils.js b/gcp/functions/build/src/utils.js index debeeb7e..65caa4c6 100644 --- a/gcp/functions/build/src/utils.js +++ b/gcp/functions/build/src/utils.js @@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.splitIntoChunks = exports.getProject = exports.getAdsConfig = exports.getScript = void 0; +exports.startPeriodicMemoryLogging = exports.setLogLevel = exports.splitIntoChunks = exports.getProject = exports.getAdsConfig = exports.getScript = void 0; const google_auth_library_1 = require("google-auth-library"); const google_ads_api_report_fetcher_1 = require("google-ads-api-report-fetcher"); const node_path_1 = __importDefault(require("node:path")); @@ -89,4 +89,25 @@ function splitIntoChunks(array, max) { return result; } exports.splitIntoChunks = splitIntoChunks; +function setLogLevel(req) { + const logLevel = req.query.log_level || process.env.LOG_LEVEL; + if (logLevel) { + process.env.LOG_LEVEL = logLevel; + (0, google_ads_api_report_fetcher_1.getLogger)().level = logLevel; + } +} +exports.setLogLevel = setLogLevel; +/** + * Start a periodic logging of memory usage in backgroung. + * @param logger logger to write to + * @param intervalMs interval in milliseconds + * @returns a callback to call for stopping logging + */ +function startPeriodicMemoryLogging(logger, intervalMs = 5000) { + const intervalId = setInterval(() => { + logger.info((0, google_ads_api_report_fetcher_1.getMemoryUsage)('Periodic')); + }, intervalMs); + return () => clearInterval(intervalId); // Return function to stop logging +} +exports.startPeriodicMemoryLogging = startPeriodicMemoryLogging; //# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/gcp/functions/build/src/utils.js.map b/gcp/functions/build/src/utils.js.map index 296692b4..81ca51e7 100644 --- a/gcp/functions/build/src/utils.js.map +++ b/gcp/functions/build/src/utils.js.map @@ -1 +1 @@ -{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gcp/functions/package-lock.json b/gcp/functions/package-lock.json index c2dc0513..d391e6bf 100644 --- a/gcp/functions/package-lock.json +++ b/gcp/functions/package-lock.json @@ -11,7 +11,7 @@ "@google-cloud/functions-framework": "^3.3.0", "@google-cloud/logging": "^11.0.0", "@google-cloud/logging-winston": "^6.0.0", - "google-ads-api-report-fetcher": "^2.9.0", + "google-ads-api-report-fetcher": "2.11", "google-auth-library": "^9.1.0", "js-yaml": "^4.1.0" }, @@ -1605,6 +1605,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axios": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", + "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3023,6 +3046,25 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -3330,9 +3372,9 @@ } }, "node_modules/google-ads-api-report-fetcher": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/google-ads-api-report-fetcher/-/google-ads-api-report-fetcher-2.9.0.tgz", - "integrity": "sha512-SFeE4rEKuIwoRP7UIJIyzm67trVSg77/cHeG4MAAcoQLB+Jm6bb69ZGXIsQSj8pTEDPFFNUNd8/41BHlnZ/mqg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/google-ads-api-report-fetcher/-/google-ads-api-report-fetcher-2.11.0.tgz", + "integrity": "sha512-MZYYpWjyjDaNjUGqMuOMQIMQf7WFb7IzZfO8+XOWefEooRLhGalf8v5/lC87dptUNHqF72pZ0yzuWiQnFpMzVw==", "dependencies": { "@google-cloud/bigquery": "^7.3.0", "@google-cloud/logging": "^11.0.0", @@ -3344,6 +3386,7 @@ "@types/lodash": "^4.14.195", "@types/yargs": "^17.0.24", "async": "^3.2.5", + "axios": "^1.7.2", "chalk": "^4.1.2", "csv": "^6.3.5", "csv-stringify": "^6.4.4", @@ -5010,6 +5053,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", diff --git a/gcp/functions/package.json b/gcp/functions/package.json index 6c9d5ae3..c7f889a2 100644 --- a/gcp/functions/package.json +++ b/gcp/functions/package.json @@ -23,7 +23,7 @@ "@google-cloud/functions-framework": "^3.3.0", "@google-cloud/logging": "^11.0.0", "@google-cloud/logging-winston": "^6.0.0", - "google-ads-api-report-fetcher": "^2.9.0", + "google-ads-api-report-fetcher": "2.11", "google-auth-library": "^9.1.0", "js-yaml": "^4.1.0" }, diff --git a/gcp/functions/src/gaarf-bq-view.ts b/gcp/functions/src/gaarf-bq-view.ts index 29ece391..f017942d 100644 --- a/gcp/functions/src/gaarf-bq-view.ts +++ b/gcp/functions/src/gaarf-bq-view.ts @@ -14,12 +14,12 @@ * limitations under the License. */ import path from 'node:path'; -import {BigQueryExecutor} from 'google-ads-api-report-fetcher'; +import {BigQueryExecutor, getMemoryUsage} from 'google-ads-api-report-fetcher'; import type {HttpFunction} from '@google-cloud/functions-framework/build/src/functions'; import express from 'express'; import {BigQueryExecutorOptions} from 'google-ads-api-report-fetcher/src/lib/bq-executor'; import {createLogger, ILogger} from './logger'; -import {getProject} from './utils'; +import {getProject, setLogLevel, startPeriodicMemoryLogging} from './utils'; async function main_bq_view_unsafe( req: express.Request, @@ -55,6 +55,8 @@ export const main_bq_view: HttpFunction = async ( req: express.Request, res: express.Response ) => { + setLogLevel(req); + const dumpMemory = !!(req.query.dump_memory || process.env.DUMP_MEMORY); const projectId = await getProject(); const logger = createLogger( req, @@ -62,6 +64,11 @@ export const main_bq_view: HttpFunction = async ( process.env.K_SERVICE || 'gaarf-bq' ); await logger.info('request', {body: req.body, query: req.query}); + let dispose; + if (dumpMemory) { + logger.info(getMemoryUsage('Start')); + dispose = startPeriodicMemoryLogging(logger, 60_000); + } try { await main_bq_view_unsafe(req, res, projectId, logger); @@ -69,5 +76,10 @@ export const main_bq_view: HttpFunction = async ( console.log(e); await logger.error(e.message, {error: e}); res.status(500).send(e.message).end(); + } finally { + if (dumpMemory) { + if (dispose) dispose(); + logger.info(getMemoryUsage('End')); + } } }; diff --git a/gcp/functions/src/gaarf-bq.ts b/gcp/functions/src/gaarf-bq.ts index fa6f8d50..a43c77c6 100644 --- a/gcp/functions/src/gaarf-bq.ts +++ b/gcp/functions/src/gaarf-bq.ts @@ -13,10 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {BigQueryExecutor} from 'google-ads-api-report-fetcher'; +import {BigQueryExecutor, getMemoryUsage} from 'google-ads-api-report-fetcher'; import type {HttpFunction} from '@google-cloud/functions-framework/build/src/functions'; import express from 'express'; -import {getProject, getScript} from './utils'; +import { + getProject, + getScript, + setLogLevel, + startPeriodicMemoryLogging, +} from './utils'; import {BigQueryExecutorOptions} from 'google-ads-api-report-fetcher/src/lib/bq-executor'; import {createLogger, ILogger} from './logger'; @@ -51,6 +56,8 @@ export const main_bq: HttpFunction = async ( req: express.Request, res: express.Response ) => { + setLogLevel(req); + const dumpMemory = !!(req.query.dump_memory || process.env.DUMP_MEMORY); const projectId = await getProject(); const logger = createLogger( req, @@ -58,6 +65,11 @@ export const main_bq: HttpFunction = async ( process.env.K_SERVICE || 'gaarf-bq' ); await logger.info('request', {body: req.body, query: req.query}); + let dispose; + if (dumpMemory) { + logger.info(getMemoryUsage('Start')); + dispose = startPeriodicMemoryLogging(logger, 60_000); + } try { await main_bq_unsafe(req, res, projectId, logger); @@ -65,5 +77,10 @@ export const main_bq: HttpFunction = async ( console.log(e); await logger.error(e.message, {error: e}); res.status(500).send(e.message).end(); + } finally { + if (dumpMemory) { + if (dispose) dispose(); + logger.info(getMemoryUsage('End')); + } } }; diff --git a/gcp/functions/src/gaarf-getcids.ts b/gcp/functions/src/gaarf-getcids.ts index f212ba49..346550bd 100644 --- a/gcp/functions/src/gaarf-getcids.ts +++ b/gcp/functions/src/gaarf-getcids.ts @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,16 +13,42 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +/** + * Cloud Function 'gaarf-getids' - executes Ads query (suplied either via body or as a GCS path) and writes data to BigQuery + * arguments: +* `ads_config_path` - a path to Ads config, same as for gaarf +* `customer_id` - a seed customer id (CID), without '-'; + can be specified in google-ads.yaml as well, if so then can be omitted +* `customer_ids_query` - custom Ads query to filter customer accounts expanded from `customer_id`, + same as same-name argument for gaarf cli tool. Query's first column should be a customer id (CID). +* `customer_ids_ignore` - a list of customer ids to exclude from the result +* `customer_ids_batchsize` - a size of batches into which account ids list will be split. +* `customer_ids_offset` - an offset in the customer ids list resulted from the seed CIDs and + optional query in `customer_ids_query`, it allows to implement an external batching. +* `flatten` - flatten the list of customer ids. If `customer_ids_offset` is provided then + the list will be a subset of CIDs otherwise it will be the whole list of accounts, + ignoring batching (regadless of the customer_ids_batchsize's value). + **/ import { - AdsQueryExecutor, getFileContent, - GoogleAdsApiClient, + GoogleAdsRestApiClient, GoogleAdsApiConfig, parseCustomerIds, + getMemoryUsage, + IGoogleAdsApiClient, + GoogleAdsRpcApiClient, + getCustomerIds, + filterCustomerIds, } from 'google-ads-api-report-fetcher'; import type {HttpFunction} from '@google-cloud/functions-framework/build/src/functions'; import express from 'express'; -import {getAdsConfig, getProject, splitIntoChunks} from './utils'; +import { + getAdsConfig, + getProject, + setLogLevel, + splitIntoChunks, + startPeriodicMemoryLogging, +} from './utils'; import {createLogger, ILogger} from './logger'; const DEFAULT_BATCH_SIZE = 500; @@ -47,6 +73,7 @@ async function main_getcids_unsafe( } else { customerIdsIgnore = [customerIdsIgnoreQS]; } + customerIdsIgnore = customerIdsIgnore.map(v => v.trim()); } if (!customerIds || customerIds.length === 0) { throw new Error( @@ -56,8 +83,15 @@ async function main_getcids_unsafe( if (!adsConfig.login_customer_id && customerIds && customerIds.length === 1) { adsConfig.login_customer_id = customerIds[0]; } - const adsClient = new GoogleAdsApiClient(adsConfig); - customerIds = await adsClient.getCustomerIds(customerIds); + let adsClient: IGoogleAdsApiClient; + if (req.query.api === 'rest') { + const apiVersion = req.query.apiVersion; + adsClient = new GoogleAdsRestApiClient(adsConfig, apiVersion); + } else { + adsClient = new GoogleAdsRpcApiClient(adsConfig); + } + + customerIds = await getCustomerIds(adsClient, customerIds); let customer_ids_query = ''; if (req.body && req.body.customer_ids_query) { customer_ids_query = req.body.customer_ids_query; @@ -70,8 +104,8 @@ async function main_getcids_unsafe( await logger.info( `Fetching customer id using custom query: ${customer_ids_query}` ); - const executor = new AdsQueryExecutor(adsClient); - customerIds = await executor.getCustomerIds( + customerIds = await filterCustomerIds( + adsClient, customerIds, customer_ids_query ); @@ -125,6 +159,8 @@ export const main_getcids: HttpFunction = async ( req: express.Request, res: express.Response ) => { + setLogLevel(req); + const dumpMemory = !!(req.query.dump_memory || process.env.DUMP_MEMORY); const projectId = await getProject(); const logger = createLogger( req, @@ -132,11 +168,21 @@ export const main_getcids: HttpFunction = async ( process.env.K_SERVICE || 'gaarf-getcids' ); await logger.info('request', {body: req.body, query: req.query}); + let dispose; + if (dumpMemory) { + logger.info(getMemoryUsage('Start')); + dispose = startPeriodicMemoryLogging(logger, 60_000); + } try { await main_getcids_unsafe(req, res, logger); } catch (e) { await logger.error(e.message, {error: e}); res.status(500).send(e.message).end(); + } finally { + if (dumpMemory) { + if (dispose) dispose(); + logger.info(getMemoryUsage('End')); + } } }; diff --git a/gcp/functions/src/gaarf.ts b/gcp/functions/src/gaarf.ts index f69cde9b..35331670 100644 --- a/gcp/functions/src/gaarf.ts +++ b/gcp/functions/src/gaarf.ts @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,28 +15,87 @@ */ /** - * Cloud Function 'gaarf' - executes Ads query (suplied either via body or as gcs path) and writes data to BigQuery + * Cloud Function 'gaarf' - executes Ads query (suplied either via body or as a GCS path) and writes data to BigQuery (or other writer) * arguments: - * - (required) ads config - different sources are supported, see `getAdsConfig` fucntion - * - (required) bq_dataset - (can be taken from envvar DATASET) output BQ dataset id + * - (required) ads config - different sources are supported, see `getAdsConfig` function + * - writer - writer to use: "bq", "json", "csv". By default - "bq" (BigQuery) + * - bq_dataset - (can be taken from envvar DATASET) output BQ dataset id * - bq_project_id - BigQuery project id, be default the current project is used * - customer_id - Ads customer id (a.k.a. CID), can be taken from google-ads.yaml if specified - * - single_customer - true for skipping loading of subaccount, assuming the supplied CID is a leaf one (not MCC) + * - expand_mcc - true to expand account in `customer_id` argument. By default (if fale) it also disables creating union views. * - bq_dataset_location - BigQuery dataset location ('us' or 'europe'), optional, by default 'us' is used + * - output_path - output path for interim data (for BigQueryWriter) or generated data (Csv/Json writers) */ import { AdsQueryExecutor, - AdsApiVersion, BigQueryWriter, BigQueryWriterOptions, - GoogleAdsApiClient, + GoogleAdsRpcApiClient, + getMemoryUsage, + getCustomerIds, + GoogleAdsApiConfig, + GoogleAdsRestApiClient, + IGoogleAdsApiClient, + CsvWriter, + CsvWriterOptions, + JsonWriter, + JsonWriterOptions, } from 'google-ads-api-report-fetcher'; import type {HttpFunction} from '@google-cloud/functions-framework/build/src/functions'; import express from 'express'; -import {GoogleAdsApiConfig} from 'google-ads-api-report-fetcher/src/lib/ads-api-client'; -import {getAdsConfig, getProject, getScript} from './utils'; +import { + getAdsConfig, + getProject, + getScript, + setLogLevel, + startPeriodicMemoryLogging, +} from './utils'; import {ILogger, createLogger} from './logger'; +function getQueryWriter(req: express.Request, projectId: string) { + const body = req.body || {}; + + if (!req.query.writer || req.query.writer === 'bq') { + const bqWriterOptions: BigQueryWriterOptions = { + datasetLocation: req.query.bq_dataset_location, + arrayHandling: body.writer_options?.array_handling, + arraySeparator: body.writer_options?.array_separator, + outputPath: req.query.output_path || `gs://${projectId}/tmp`, + noUnionView: true, + }; + if (req.query.expand_mcc) { + bqWriterOptions.noUnionView = false; + } + const dataset = req.query.bq_dataset || process.env.DATASET; + if (!dataset) + throw new Error( + "Dataset is not specified in either 'bq_dataset' query argument or DATASET envvar" + ); + const writer = new BigQueryWriter( + projectId, + dataset, + bqWriterOptions + ); + return writer; + } + if (req.query.writer === 'csv') { + const options: CsvWriterOptions = { + quoted: body.writer_options?.quoted, + arraySeparator: body.writer_options?.array_separator, + outputPath: req.query.output_path || `gs://${projectId}/tmp`, + }; + return new CsvWriter(options); + } + if (req.query.writer === 'json') { + const options: JsonWriterOptions = { + format: body.writer_options?.format, + valueFormat: body.writer_options?.value_format, + outputPath: req.query.output_path || `gs://${projectId}/tmp`, + }; + return new JsonWriter(options); + } +} + async function main_unsafe( req: express.Request, res: express.Response, @@ -49,11 +108,6 @@ async function main_unsafe( projectId = req.query.bq_project_id || process.env.PROJECT_ID || projectId; - const dataset = req.query.bq_dataset || process.env.DATASET; - if (!dataset) - throw new Error( - "Dataset is not specified in either 'bq_dataset' query argument or DATASET envvar" - ); const customerId = req.query.customer_id || adsConfig.customer_id; if (!customerId) throw new Error( @@ -63,30 +117,27 @@ async function main_unsafe( adsConfig.login_customer_id = customerId; } - const ads_client = new GoogleAdsApiClient(adsConfig); - // TODO: support CsvWriter and output path to GCS - // (csv.destination_folder=gs://bucket/path) - - const singleCustomer = req.query.single_customer; - const body = req.body || {}; - const macroParams = body.macro; - const bq_writer_options: BigQueryWriterOptions = { - datasetLocation: req.query.bq_dataset_location, - arrayHandling: body.bq_writer_options?.array_handling, - arraySeparator: body.bq_writer_options?.array_separator, - }; + let adsClient: IGoogleAdsApiClient; + if (req.query.api === 'rest') { + const apiVersion = req.query.apiVersion; + adsClient = new GoogleAdsRestApiClient(adsConfig, apiVersion); + } else { + adsClient = new GoogleAdsRpcApiClient(adsConfig); + } const {queryText, scriptName} = await getScript(req, logger); // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars const {refresh_token, developer_token, ...ads_config_wo_token} = ( adsConfig ); - ads_config_wo_token['ApiVersion'] = AdsApiVersion; + ads_config_wo_token['ApiVersion'] = adsClient.apiVersion; await logger.info( - `Running Cloud Function ${functionName}, Ads API ${AdsApiVersion}, ${ - singleCustomer - ? 'without MCC expansion (CID=' + customerId + ')' - : 'with MCC expansion (MCC=' + customerId + ')' + `Running Cloud Function ${functionName}, Ads API ${adsClient.apiType} ${ + adsClient.apiVersion + }, ${ + req.query.expand_mcc + ? 'with MCC expansion (MCC=' + customerId + ')' + : 'CID=' + customerId }, see Ads API config in metadata field`, { adsConfig: ads_config_wo_token, @@ -97,11 +148,8 @@ async function main_unsafe( ); let customers: string[]; - if (singleCustomer) { - customers = [customerId]; - bq_writer_options.noUnionView = true; - } else { - customers = await ads_client.getCustomerIds(customerId); + if (req.query.expand_mcc) { + customers = await getCustomerIds(adsClient, customerId); await logger.info( `[${scriptName}] Customers to process (${customers.length})`, { @@ -110,20 +158,18 @@ async function main_unsafe( customers, } ); + } else { + customers = [customerId]; } - const executor = new AdsQueryExecutor(ads_client); - const writer = new BigQueryWriter( - projectId, - dataset, - bq_writer_options - ); + const executor = new AdsQueryExecutor(adsClient); + const writer = getQueryWriter(req, projectId); const result = await executor.execute( scriptName, queryText, customers, - macroParams, + req.body.macro, writer ); @@ -141,15 +187,31 @@ export const main: HttpFunction = async ( req: express.Request, res: express.Response ) => { + setLogLevel(req); + const dumpMemory = !!(req.query.dump_memory || process.env.DUMP_MEMORY); const projectId = await getProject(); const functionName = process.env.K_SERVICE || 'gaarf'; const logger = createLogger(req, projectId, functionName); + let dispose; + if (dumpMemory) { + logger.info(getMemoryUsage('Start')); + dispose = startPeriodicMemoryLogging(logger, 60_000); + } try { await main_unsafe(req, res, projectId, logger, functionName); } catch (e) { console.log(e); - await logger.error(e.message, {error: e, body: req.body, query: req.query}); + await logger.error(e.message, { + error: e, + body: req.body, + query: req.query, + }); res.status(500).send(e.message).end(); + } finally { + if (dumpMemory) { + if (dispose) dispose(); + logger.info(getMemoryUsage('End')); + } } }; diff --git a/gcp/functions/src/utils.ts b/gcp/functions/src/utils.ts index 10535615..b1b1ffaf 100644 --- a/gcp/functions/src/utils.ts +++ b/gcp/functions/src/utils.ts @@ -4,6 +4,8 @@ import { getFileContent, GoogleAdsApiConfig, loadAdsConfigYaml, + getLogger, + getMemoryUsage, } from 'google-ads-api-report-fetcher'; import path from 'node:path'; import fs from 'node:fs'; @@ -97,3 +99,24 @@ export function splitIntoChunks(array: Array, max: number) { } return result; } + +export function setLogLevel(req: express.Request) { + const logLevel = req.query.log_level || process.env.LOG_LEVEL; + if (logLevel) { + process.env.LOG_LEVEL = logLevel; + getLogger().level = logLevel; + } +} + +/** + * Start a periodic logging of memory usage in backgroung. + * @param logger logger to write to + * @param intervalMs interval in milliseconds + * @returns a callback to call for stopping logging + */ +export function startPeriodicMemoryLogging(logger: ILogger, intervalMs = 5000) { + const intervalId = setInterval(() => { + logger.info(getMemoryUsage('Periodic')); + }, intervalMs); + return () => clearInterval(intervalId); // Return function to stop logging +} diff --git a/gcp/workflow/workflow-ads.yaml b/gcp/workflow/workflow-ads.yaml index c7e93d8c..a33cfa45 100644 --- a/gcp/workflow/workflow-ads.yaml +++ b/gcp/workflow/workflow-ads.yaml @@ -4,15 +4,16 @@ main: - init: assign: - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} - - location: ${default(map.get(args, "location"), "us-central1")} - scripts: ${args.scripts} - accounts: ${args.accounts} - - cloud_function: ${default(map.get(args, "cloud_function"), "gaarf")} + - function_name: ${default(map.get(args, "function_name"), "gaarf")} + - function_location: ${default(map.get(args, "function_location"), "us-central1")} - ads_config_path: ${args.ads_config_path} - - bq_dataset: ${args.bq_dataset} - - bq_dataset_location: ${map.get(args, "bq_dataset_location")} + - writer: ${default(map.get(args, "writer"), "bq")} + - bq_dataset: ${default(map.get(args, "bq_dataset"), "")} + - bq_dataset_location: ${default(map.get(args, "bq_dataset_location"), "")} - macros: ${map.get(args, "macros")} - - writer_options: ${map.get(args, "bq_writer_options")} + - writer_options: ${map.get(args, "writer_options")} - output_path: ${default(map.get(args, "output_path"), "")} - concurrency_limit: ${default(map.get(args, "concurrency_limit"), 20)} @@ -20,14 +21,14 @@ main: - get_function: call: http.get args: - url: ${"https://cloudfunctions.googleapis.com/v2/projects/" + project + "/locations/" + location + "/functions/" + cloud_function} + url: ${"https://cloudfunctions.googleapis.com/v2/projects/" + project + "/locations/" + function_location + "/functions/" + function_name} auth: type: OAuth2 result: function # TODO: move to using CF adapter when it's ready (currently only v1 supported): #call: googleapis.cloudfunctions.v2.projects.locations.functions.get #args: - # name: ${"projects/" + project + "/locations/" + location + "/functions/" + cloud_function} + # name: ${"projects/" + project + "/locations/" + function_location + "/functions/" + function_name} #result: function - initialize_functions_uris: assign: @@ -63,6 +64,7 @@ main: account: ${accounts[0]} macros: ${macros} project: ${project} + writer: ${writer} bq_dataset: ${bq_dataset} bq_dataset_location: ${bq_dataset_location} ads_config_path: ${ads_config_path} @@ -93,6 +95,7 @@ main: account: ${account} macros: ${macros} project: ${project} + writer: ${writer} bq_dataset: ${bq_dataset} bq_dataset_location: ${bq_dataset_location} ads_config_path: ${ads_config_path} @@ -149,6 +152,7 @@ executeAdsQuery: account, macros, project, + writer, bq_dataset, bq_dataset_location, ads_config_path, @@ -170,11 +174,10 @@ executeAdsQuery: script_path: ${script_path} ads_config_path: ${ads_config_path} bq_project_id: ${project} + writer: ${writer} bq_dataset: ${bq_dataset} bq_dataset_location: ${bq_dataset_location} customer_id: ${account} - single_customer: true # it's important to prevent fetching child accounts for the supplied cid - writer: "bq" output_path: ${output_path} body: macro: ${macros} diff --git a/gcp/workflow/workflow.yaml b/gcp/workflow/workflow.yaml index cfe28a75..45eca17c 100644 --- a/gcp/workflow/workflow.yaml +++ b/gcp/workflow/workflow.yaml @@ -3,18 +3,18 @@ main: steps: - init: assign: - - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} - - location: ${default(map.get(args, "location"), "us-central1")} - - cloud_function: ${default(map.get(args, "cloud_function"), "gaarf")} - - bq_dataset_location: ${if(default(map.get(args, "bq_dataset_location"), "us") == "", "us", default(map.get(args, "bq_dataset_location"), "us"))} - - gcs_bucket: ${default(map.get(args,"gcs_bucket"), project)} - - only_run_bq: ${default(map.get(args,"only_run_bq"), false)} - - completion_topic: ${default(map.get(args, "completion_topic"), "gaarf_wf_completed")} - # 20 is the default for "Concurrent branches and iterations" - https://cloud.google.com/workflows/quotas#parallel_steps - - concurrency_limit: ${default(map.get(args, "concurrency_limit"), 20)} - - workflow_ads_id: ${default(map.get(args, "workflow_ads_id"), sys.get_env("GOOGLE_CLOUD_WORKFLOW_ID") + "-ads")} - #- recreate_dataset: ${default(map.get(args,"recreate_dataset"), false)} - - disable_strict_views: ${default(map.get(args,"disable_strict_views"), false)} + - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} + - cloud_function: ${default(map.get(args, "cloud_function"), "gaarf")} + - function_location: ${default(map.get(args, "location"), "us-central1")} + - bq_dataset_location: ${if(default(map.get(args, "bq_dataset_location"), "us") == "", "us", default(map.get(args, "bq_dataset_location"), "us"))} + - gcs_bucket: ${default(map.get(args,"gcs_bucket"), project)} + - only_run_bq: ${default(map.get(args,"only_run_bq"), false)} + - completion_topic: ${default(map.get(args, "completion_topic"), "gaarf_wf_completed")} + # 20 is the default for "Concurrent branches and iterations" - https://cloud.google.com/workflows/quotas#parallel_steps + - concurrency_limit: ${default(map.get(args, "concurrency_limit"), 20)} + - workflow_ads_id: ${default(map.get(args, "workflow_ads_id"), sys.get_env("GOOGLE_CLOUD_WORKFLOW_ID") + "-ads")} + #- recreate_dataset: ${default(map.get(args,"recreate_dataset"), false)} + - disable_strict_views: ${default(map.get(args,"disable_strict_views"), false)} - check_shortcut_arg: switch: - condition: ${only_run_bq} @@ -24,7 +24,7 @@ main: call: runAdsQueries args: project: ${project} - location: ${location} + function_location: ${function_location} function_name: ${cloud_function} gcs_bucket: ${gcs_bucket} queries_path: ${args.ads_queries_path} @@ -34,10 +34,11 @@ main: customer_ids_query: ${map.get(args, "customer_ids_query")} customer_ids_offset: ${map.get(args, "customer_ids_offset")} customer_ids_batchsize: ${map.get(args, "customer_ids_batchsize")} - bq_dataset: ${args.dataset} + writer: ${default(map.get(args, "writer"), "bq")} + bq_dataset: ${default(map.get(args,"dataset"), "")} bq_dataset_location: ${bq_dataset_location} macros: ${map.get(args, "ads_macro")} - bq_writer_options: ${map.get(args, "bq_writer_options")} + writer_options: ${default(map.get(args, "writer_options"), map.get(args, "bq_writer_options"))} output_path: ${map.get(args, "output_path")} concurrency_limit: ${concurrency_limit} workflow_ads_id: ${workflow_ads_id} @@ -47,8 +48,8 @@ main: call: runBigQueryQueries args: project: ${project} - location: ${location} function_name: ${cloud_function + "-bq"} + function_location: ${function_location} gcs_bucket: ${gcs_bucket} queries_path: ${args.bq_queries_path} dataset_location: ${bq_dataset_location} @@ -71,14 +72,36 @@ main: return: ${accounts} runAdsQueries: - params: [project, location, function_name, gcs_bucket, queries_path, ads_config_path, cid, cid_ignore, customer_ids_query, customer_ids_offset, customer_ids_batchsize, bq_dataset, bq_dataset_location, macros, bq_writer_options, output_path, concurrency_limit, workflow_ads_id, disable_strict_views] + params: + [ + project, + function_name, + function_location, + gcs_bucket, + queries_path, + ads_config_path, + cid, + cid_ignore, + customer_ids_query, + customer_ids_offset, + customer_ids_batchsize, + writer, + bq_dataset, + bq_dataset_location, + macros, + writer_options, + output_path, + concurrency_limit, + workflow_ads_id, + disable_strict_views, + ] # NOTE: currently it's assumed that CF's project is the same as project for BQ datasets steps: # get CF 'gaarf-getcids' function's URL - get_function_cids: call: http.get args: - url: ${"https://cloudfunctions.googleapis.com/v2/projects/" + project + "/locations/" + location + "/functions/" + function_name + "-getcids"} + url: ${"https://cloudfunctions.googleapis.com/v2/projects/" + project + "/locations/" + function_location + "/functions/" + function_name + "-getcids"} auth: type: OAuth2 result: function_cids @@ -86,7 +109,7 @@ runAdsQueries: - get_function_view: call: http.get args: - url: ${"https://cloudfunctions.googleapis.com/v2/projects/" + project + "/locations/" + location + "/functions/" + function_name + "-bq-view"} + url: ${"https://cloudfunctions.googleapis.com/v2/projects/" + project + "/locations/" + function_location + "/functions/" + function_name + "-bq-view"} auth: type: OAuth2 result: function_view @@ -157,36 +180,37 @@ runAdsQueries: in: ${accounts} index: index steps: - - log_cids_batch: - call: sys.log - args: - json: - text: "Executing Ads subworkflow" - index: ${index} - count: ${len(accounts_batch)} - accounts: ${accounts_batch} - severity: "INFO" - - run_ads_workflow: - call: googleapis.workflowexecutions.v1.projects.locations.workflows.executions.run - args: - workflow_id: ${workflow_ads_id} - connector_params: - timeout: 86400 # 24h=60*60*24 seconds - argument: - location: ${location} - scripts: ${scripts} - accounts: ${accounts_batch} - cloud_function: ${function_name} - ads_config_path: ${ads_config_path} - bq_dataset: ${bq_dataset} - bq_dataset_location: ${bq_dataset_location} - macros: ${macros} - bq_writer_options: ${bq_writer_options} - output_path: ${output_path} - concurrency_limit: ${concurrency_limit} - result: execution_result + - log_cids_batch: + call: sys.log + args: + json: + text: "Executing Ads subworkflow" + index: ${index} + count: ${len(accounts_batch)} + accounts: ${accounts_batch} + severity: "INFO" + - run_ads_workflow: + call: googleapis.workflowexecutions.v1.projects.locations.workflows.executions.run + args: + workflow_id: ${workflow_ads_id} + connector_params: + timeout: 86400 # 24h=60*60*24 seconds + argument: + scripts: ${scripts} + accounts: ${accounts_batch} + function_name: ${function_name} + function_location: ${function_location} + ads_config_path: ${ads_config_path} + writer: ${writer} + bq_dataset: ${bq_dataset} + bq_dataset_location: ${bq_dataset_location} + macros: ${macros} + writer_options: ${writer_options} + output_path: ${output_path} + concurrency_limit: ${concurrency_limit} + result: execution_result - # collection account ids from `accounts` where they are slit into batched into a flatten list + # collecting account ids from `accounts` where they are slit into batched into a flatten list - initialize_accounts_flatten: assign: - accounts_flatten: [] @@ -204,6 +228,12 @@ runAdsQueries: assign: - accounts_flatten: ${list.concat(accounts_flatten, account)} + - check_for_bq_writer: + switch: + - condition: ${writer == "bq" or writer == "bigquery"} + next: create_views + next: return_result + # for each script (excluding constants) create a unified view - create_views: for: @@ -234,9 +264,18 @@ runAdsQueries: - return_result: return: ${accounts} - runBigQueryQueries: - params: [project, location, function_name, gcs_bucket, queries_path, macros, sqlParams, dataset_location] + params: + [ + project, + function_location, + function_name, + gcs_bucket, + queries_path, + macros, + sqlParams, + dataset_location, + ] steps: - get_bq_scripts_from_gcs: call: googleapis.storage.v1.objects.list @@ -272,18 +311,26 @@ runBigQueryQueries: args: data: ${bq_scripts} severity: "INFO" + + # check if there are any bq scripts on GCS + - check_scripts2: + switch: + - condition: ${len(bq_scripts) > 0} + next: get_function_bq + next: end + # get clound function's uri - get_function_bq: call: http.get args: - url: ${"https://cloudfunctions.googleapis.com/v2/projects/" + project + "/locations/" + location + "/functions/" + function_name} + url: ${"https://cloudfunctions.googleapis.com/v2/projects/" + project + "/locations/" + function_location + "/functions/" + function_name} auth: type: OAuth2 result: function_bq # TODO: move to using CF adapter when it's ready (currently only v1 supported): #call: googleapis.cloudfunctions.v2.projects.locations.functions.get #args: - # name: ${"projects/" + project + "/locations/" + location + "/functions/" + function_name} + # name: ${"projects/" + project + "/locations/" + function_location + "/functions/" + function_name} #result: function_bq - runBqQueries: for: