Skip to content

Commit 99613dc

Browse files
averikitschYuan325
andauthored
feat(source/cloudsql)!: restructure prebuilt toolsets (googleapis#2635)
## Description > Should include a concise description of the changes (bug or feature), it's > impact, along with a summary of the solution ## PR Checklist > Thank you for opening a Pull Request! Before submitting your PR, there are a > few things you can do to make sure it goes smoothly: - [ ] Make sure you reviewed [CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md) - [ ] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea - [ ] Ensure the tests and linter pass - [ ] Code coverage does not decrease (if any source code was changed) - [ ] Appropriate docs were updated (if necessary) - [ ] Make sure to add `!` if this involve a breaking change 🛠️ Fixes #<issue_number_goes_here> --------- Co-authored-by: Yuan Teoh <45984206+Yuan325@users.noreply.github.com>
1 parent 87cd4a0 commit 99613dc

File tree

4 files changed

+559
-274
lines changed

4 files changed

+559
-274
lines changed

cmd/internal/tools_file_test.go

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,30 +1710,78 @@ func TestPrebuiltTools(t *testing.T) {
17101710
name: "cloudsqlpg prebuilt tools",
17111711
in: cloudsqlpg_config,
17121712
wantToolset: server.ToolsetConfigs{
1713-
"cloud_sql_postgres_database_tools": tools.ToolsetConfig{
1714-
Name: "cloud_sql_postgres_database_tools",
1715-
ToolNames: []string{"execute_sql", "list_tables", "list_active_queries", "list_available_extensions", "list_installed_extensions", "list_autovacuum_configurations", "list_memory_configurations", "list_top_bloated_tables", "list_replication_slots", "list_invalid_indexes", "get_query_plan", "list_views", "list_schemas", "database_overview", "list_triggers", "list_indexes", "list_sequences", "long_running_transactions", "list_locks", "replication_stats", "list_query_stats", "get_column_cardinality", "list_publication_tables", "list_tablespaces", "list_pg_settings", "list_database_stats", "list_roles", "list_table_stats", "list_stored_procedure"},
1713+
"admin": tools.ToolsetConfig{
1714+
Name: "admin",
1715+
ToolNames: []string{"create_instance", "get_instance", "list_instances", "create_database", "list_databases", "create_user", "wait_for_operation", "clone_instance"},
1716+
},
1717+
"lifecycle": tools.ToolsetConfig{
1718+
Name: "lifecycle",
1719+
ToolNames: []string{"create_backup", "restore_backup", "postgres_upgrade_precheck", "wait_for_operation", "database_overview", "get_instance", "list_instances"},
1720+
},
1721+
"data": tools.ToolsetConfig{
1722+
Name: "data",
1723+
ToolNames: []string{"execute_sql", "list_tables", "list_views", "list_schemas", "list_triggers", "list_indexes", "list_sequences", "list_stored_procedure"},
1724+
},
1725+
"monitor": tools.ToolsetConfig{
1726+
Name: "monitor",
1727+
ToolNames: []string{"get_system_metrics", "get_query_metrics", "list_query_stats", "get_query_plan", "list_database_stats", "list_active_queries", "long_running_transactions", "list_locks"},
1728+
},
1729+
"health": tools.ToolsetConfig{
1730+
Name: "health",
1731+
ToolNames: []string{"list_top_bloated_tables", "list_invalid_indexes", "list_table_stats", "get_column_cardinality", "list_autovacuum_configurations", "list_tablespaces", "database_overview", "list_pg_settings"},
1732+
},
1733+
"view-config": tools.ToolsetConfig{
1734+
Name: "view-config",
1735+
ToolNames: []string{"list_available_extensions", "list_installed_extensions", "list_memory_configurations", "list_pg_settings", "database_overview", "get_instance"},
1736+
},
1737+
"replication": tools.ToolsetConfig{
1738+
Name: "replication",
1739+
ToolNames: []string{"replication_stats", "list_replication_slots", "list_publication_tables", "list_roles", "list_pg_settings", "database_overview"},
17161740
},
17171741
},
17181742
},
17191743
{
17201744
name: "cloudsqlmysql prebuilt tools",
17211745
in: cloudsqlmysql_config,
17221746
wantToolset: server.ToolsetConfigs{
1723-
"cloud_sql_mysql_database_tools": tools.ToolsetConfig{
1724-
Name: "cloud_sql_mysql_database_tools",
1725-
ToolNames: []string{"execute_sql", "list_tables", "get_query_plan", "list_active_queries", "list_tables_missing_unique_indexes", "list_table_fragmentation"},
1747+
"admin": tools.ToolsetConfig{
1748+
Name: "admin",
1749+
ToolNames: []string{"create_instance", "get_instance", "list_instances", "create_database", "list_databases", "create_user", "wait_for_operation"},
1750+
},
1751+
"data": tools.ToolsetConfig{
1752+
Name: "data",
1753+
ToolNames: []string{"execute_sql", "list_tables", "get_query_plan", "list_active_queries"},
1754+
},
1755+
"monitor": tools.ToolsetConfig{
1756+
Name: "monitor",
1757+
ToolNames: []string{"get_query_plan", "list_active_queries", "get_query_metrics", "get_system_metrics", "list_table_fragmentation", "list_tables_missing_unique_indexes"},
1758+
},
1759+
"lifecycle": tools.ToolsetConfig{
1760+
Name: "lifecycle",
1761+
ToolNames: []string{"create_backup", "restore_backup", "clone_instance", "list_instances", "get_instance", "wait_for_operation"},
17261762
},
17271763
},
17281764
},
17291765
{
17301766
name: "cloudsqlmssql prebuilt tools",
17311767
in: cloudsqlmssql_config,
17321768
wantToolset: server.ToolsetConfigs{
1733-
"cloud_sql_mssql_database_tools": tools.ToolsetConfig{
1734-
Name: "cloud_sql_mssql_database_tools",
1769+
"admin": tools.ToolsetConfig{
1770+
Name: "admin",
1771+
ToolNames: []string{"create_instance", "get_instance", "list_instances", "create_database", "list_databases", "create_user", "wait_for_operation"},
1772+
},
1773+
"data": tools.ToolsetConfig{
1774+
Name: "data",
17351775
ToolNames: []string{"execute_sql", "list_tables"},
17361776
},
1777+
"monitor": tools.ToolsetConfig{
1778+
Name: "monitor",
1779+
ToolNames: []string{"get_system_metrics"},
1780+
},
1781+
"lifecycle": tools.ToolsetConfig{
1782+
Name: "lifecycle",
1783+
ToolNames: []string{"create_backup", "restore_backup", "clone_instance", "list_instances", "get_instance", "wait_for_operation"},
1784+
},
17371785
},
17381786
},
17391787
{

internal/prebuiltconfigs/tools/cloud-sql-mssql.yaml

Lines changed: 77 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,82 @@
1313
# limitations under the License.
1414

1515
sources:
16-
cloudsql-mssql-source:
17-
kind: cloud-sql-mssql
18-
project: ${CLOUD_SQL_MSSQL_PROJECT}
19-
region: ${CLOUD_SQL_MSSQL_REGION}
20-
instance: ${CLOUD_SQL_MSSQL_INSTANCE}
21-
database: ${CLOUD_SQL_MSSQL_DATABASE}
22-
user: ${CLOUD_SQL_MSSQL_USER}
23-
password: ${CLOUD_SQL_MSSQL_PASSWORD}
24-
ipType: ${CLOUD_SQL_MSSQL_IP_TYPE:public}
16+
cloudsql-mssql-source:
17+
kind: cloud-sql-mssql
18+
project: ${CLOUD_SQL_MSSQL_PROJECT}
19+
region: ${CLOUD_SQL_MSSQL_REGION}
20+
instance: ${CLOUD_SQL_MSSQL_INSTANCE}
21+
database: ${CLOUD_SQL_MSSQL_DATABASE}
22+
user: ${CLOUD_SQL_MSSQL_USER}
23+
password: ${CLOUD_SQL_MSSQL_PASSWORD}
24+
ipType: ${CLOUD_SQL_MSSQL_IP_TYPE:public}
25+
cloud-sql-admin-source:
26+
kind: cloud-sql-admin
27+
defaultProject: ${CLOUD_SQL_MSSQL_PROJECT:}
28+
cloud-monitoring-source:
29+
kind: cloud-monitoring
2530
tools:
26-
execute_sql:
27-
kind: mssql-execute-sql
28-
source: cloudsql-mssql-source
29-
description: Use this tool to execute SQL.
30-
31-
list_tables:
32-
kind: mssql-list-tables
33-
source: cloudsql-mssql-source
34-
description: "Lists detailed schema information (object type, columns, constraints, indexes, triggers, comment) as JSON for user-created tables (ordinary or partitioned). Filters by a comma-separated list of names. If names are omitted, lists all tables in user schemas."
35-
31+
execute_sql:
32+
kind: mssql-execute-sql
33+
source: cloudsql-mssql-source
34+
description: Use this tool to execute SQL.
35+
list_tables:
36+
kind: mssql-list-tables
37+
source: cloudsql-mssql-source
38+
description: "Lists detailed schema information (object type, columns, constraints, indexes, triggers, comment) as JSON for user-created tables (ordinary or partitioned). Filters by a comma-separated list of names. If names are omitted, lists all tables in user schemas."
39+
get_system_metrics:
40+
kind: cloud-monitoring-query-prometheus
41+
source: cloud-monitoring-source
42+
description: "Fetches system level cloudmonitoring data (timeseries metrics) for a SqlServer instance using a PromQL query. Take projectId and instanceId from the user for which the metrics timeseries data needs to be fetched.\nTo use this tool, you must provide the Google Cloud `projectId` and a PromQL `query`.\n\nGenerate PromQL `query` for SqlServer system metrics. Use the provided metrics and rules to construct queries, Get the labels like `instance_id` from user intent.\n\nDefaults:\n1. Interval: Use a default interval of `5m` for `_over_time` aggregation functions unless a different window is specified by the user.\n\nPromQL Query Examples:\n1. Basic Time Series: `avg_over_time({\"__name__\"=\"cloudsql.googleapis.com/database/cpu/utilization\",\"monitored_resource\"=\"cloudsql_database\",\"project_id\"=\"my-projectId\",\"database_id\"=\"my-projectId:my-instanceId\"}[5m])`\n2. Top K: `topk(30, avg_over_time({\"__name__\"=\"cloudsql.googleapis.com/database/cpu/utilization\",\"monitored_resource\"=\"cloudsql_database\",\"project_id\"=\"my-projectId\",\"database_id\"=\"my-projectId:my-instanceId\"}[5m]))`\n3. Mean: `avg(avg_over_time({\"__name__\"=\"cloudsql.googleapis.com/database/cpu/utilization\",\"monitored_resource\"=\"cloudsql_database\",\"project_id\"=\"my-projectId\",\"database_id\"=\"my-projectId:my-instanceId\"}[5m]))`\n4. Minimum: `min(min_over_time({\"__name__\"=\"cloudsql.googleapis.com/database/cpu/utilization\",\"monitored_resource\"=\"cloudsql_database\",\"project_id\"=\"my-projectId\",\"database_id\"=\"my-projectId:my-instanceId\"}[5m]))`\n5. Maximum: `max(max_over_time({\"__name__\"=\"cloudsql.googleapis.com/database/cpu/utilization\",\"monitored_resource\"=\"cloudsql_database\",\"project_id\"=\"my-projectId\",\"database_id\"=\"my-projectId:my-instanceId\"}[5m]))`\n6. Sum: `sum(avg_over_time({\"__name__\"=\"cloudsql.googleapis.com/database/cpu/utilization\",\"monitored_resource\"=\"cloudsql_database\",\"project_id\"=\"my-projectId\",\"database_id\"=\"my-projectId:my-instanceId\"}[5m]))`\n7. Count streams: `count(avg_over_time({\"__name__\"=\"cloudsql.googleapis.com/database/cpu/utilization\",\"monitored_resource\"=\"cloudsql_database\",\"project_id\"=\"my-projectId\",\"database_id\"=\"my-projectId:my-instanceId\"}[5m]))`\n8. Percentile with groupby on database_id: `quantile by (\"database_id\")(0.99,avg_over_time({\"__name__\"=\"cloudsql.googleapis.com/database/cpu/utilization\",\"monitored_resource\"=\"cloudsql_database\",\"project_id\"=\"my-projectId\",\"database_id\"=\"my-projectId:my-instanceId\"}[5m]))`\n\nAvailable Metrics List: metricname. description. monitored resource. labels. database_id is actually the instance id and the format is `project_id:instance_id`. \n1. `cloudsql.googleapis.com/database/cpu/utilization`: Current CPU utilization as a percentage of the reserved CPU. `cloudsql_database`. `database`, `project_id`, `database_id`.\n2. `cloudsql.googleapis.com/database/memory/usage`: RAM usage in bytes, excluding buffer/cache. `cloudsql_database`. `database`, `project_id`, `database_id`.\n3. `cloudsql.googleapis.com/database/memory/total_usage`: Total RAM usage in bytes, including buffer/cache. `cloudsql_database`. `database`, `project_id`, `database_id`.\n4. `cloudsql.googleapis.com/database/disk/bytes_used`: Data utilization in bytes. `cloudsql_database`. `database`, `project_id`, `database_id`.\n5. `cloudsql.googleapis.com/database/disk/quota`: Maximum data disk size in bytes. `cloudsql_database`. `database`, `project_id`, `database_id`.\n6. `cloudsql.googleapis.com/database/disk/read_ops_count`: Delta count of data disk read IO operations. `cloudsql_database`. `database`, `project_id`, `database_id`.\n7. `cloudsql.googleapis.com/database/disk/write_ops_count`: Delta count of data disk write IO operations. `cloudsql_database`. `database`, `project_id`, `database_id`.\n8. `cloudsql.googleapis.com/database/network/received_bytes_count`: Delta count of bytes received through the network. `cloudsql_database`. `database`, `project_id`, `database_id`.\n9. `cloudsql.googleapis.com/database/network/sent_bytes_count`: Delta count of bytes sent through the network. `cloudsql_database`. `destination`, `database`, `project_id`, `database_id`.\n10. `cloudsql.googleapis.com/database/sqlserver/memory/buffer_cache_hit_ratio`: Current percentage of pages found in the buffer cache without reading from disk. `cloudsql_database`. `database`, `project_id`, `database_id`.\n11. `cloudsql.googleapis.com/database/sqlserver/memory/memory_grants_pending`: Current number of processes waiting for a workspace memory grant. `cloudsql_database`. `database`, `project_id`, `database_id`.\n12. `cloudsql.googleapis.com/database/sqlserver/memory/free_list_stall_count`: Total number of requests that waited for a free page. `cloudsql_database`. `database`, `project_id`, `database_id`.\n13. `cloudsql.googleapis.com/database/swap/pages_swapped_in_count`: Total count of pages swapped in from disk since the system was booted. `cloudsql_database`. `database`, `project_id`, `database_id`.\n14. `cloudsql.googleapis.com/database/swap/pages_swapped_out_count`: Total count of pages swapped out to disk since the system was booted. `cloudsql_database`. `database`, `project_id`, `database_id`.\n15. `cloudsql.googleapis.com/database/sqlserver/memory/checkpoint_page_count`: Total number of pages flushed to disk by a checkpoint. `cloudsql_database`. `database`, `project_id`, `database_id`.\n16. `cloudsql.googleapis.com/database/sqlserver/memory/lazy_write_count`: Total number of buffers written by the buffer manager's lazy writer. `cloudsql_database`. `database`, `project_id`, `database_id`.\n17. `cloudsql.googleapis.com/database/sqlserver/memory/page_life_expectancy`: Current number of seconds a page will stay in the buffer pool. `cloudsql_database`. `database`, `project_id`, `database_id`.\n18. `cloudsql.googleapis.com/database/sqlserver/memory/page_operation_count`: Total number of physical database page reads or writes. `cloudsql_database`. `operation`, `database`, `project_id`, `database_id`.\n19. `cloudsql.googleapis.com/database/sqlserver/transactions/page_split_count`: Total number of page splits from overflowing index pages. `cloudsql_database`. `database`, `project_id`, `database_id`.\n20. `cloudsql.googleapis.com/database/sqlserver/transactions/deadlock_count`: Total number of lock requests that resulted in a deadlock. `cloudsql_database`. `locked_resource`, `database`, `project_id`, `database_id`.\n21. `cloudsql.googleapis.com/database/sqlserver/transactions/transaction_count`: Total number of transactions started. `cloudsql_database`. `database`, `project_id`, `database_id`.\n22. `cloudsql.googleapis.com/database/sqlserver/transactions/batch_request_count`: Total number of Transact-SQL command batches received. `cloudsql_database`. `database`, `project_id`, `database_id`.\n23. `cloudsql.googleapis.com/database/sqlserver/transactions/sql_compilation_count`: Total number of SQL compilations. `cloudsql_database`. `database`, `project_id`, `database_id`.\n24. `cloudsql.googleapis.com/database/sqlserver/transactions/sql_recompilation_count`: Total number of SQL recompilations. `cloudsql_database`. `database`, `project_id`, `database_id`.\n25. `cloudsql.googleapis.com/database/sqlserver/connections/processes_blocked`: Current number of blocked processes. `cloudsql_database`. `database`, `project_id`, `database_id`.\n26. `cloudsql.googleapis.com/database/sqlserver/transactions/lock_wait_time`: Total time lock requests were waiting for locks. `cloudsql_database`. `locked_resource`, `database`, `project_id`, `database_id`.\n27. `cloudsql.googleapis.com/database/sqlserver/transactions/lock_wait_count`: Total number of lock requests that required the caller to wait. `cloudsql_database`. `locked_resource`, `database`, `project_id`, `database_id`.\n28. `cloudsql.googleapis.com/database/network/connections`: Number of connections to databases on the instance. `cloudsql_database`. `database`, `project_id`, `database_id`.\n29. `cloudsql.googleapis.com/database/sqlserver/connections/login_attempt_count`: Total number of login attempts since the last server restart. `cloudsql_database`. `database`, `project_id`, `database_id`.\n30. `cloudsql.googleapis.com/database/sqlserver/connections/logout_count`: Total number of logout operations since the last server restart. `cloudsql_database`. `database`, `project_id`, `database_id`.\n31. `cloudsql.googleapis.com/database/sqlserver/connections/connection_reset_count`: Total number of logins started from the connection pool since the last server restart. `cloudsql_database`. `database`, `project_id`, `database_id`.\n32. `cloudsql.googleapis.com/database/sqlserver/transactions/full_scan_count`: Total number of unrestricted full scans (base-table or full-index). `cloudsql_database`. `database`, `project_id`, `database_id`.\n"
43+
restore_backup:
44+
kind: cloud-sql-restore-backup
45+
source: cloud-sql-admin-source
46+
clone_instance:
47+
kind: cloud-sql-clone-instance
48+
source: cloud-sql-admin-source
49+
get_instance:
50+
kind: cloud-sql-get-instance
51+
source: cloud-sql-admin-source
52+
list_instances:
53+
kind: cloud-sql-list-instances
54+
source: cloud-sql-admin-source
55+
create_database:
56+
kind: cloud-sql-create-database
57+
source: cloud-sql-admin-source
58+
list_databases:
59+
kind: cloud-sql-list-databases
60+
source: cloud-sql-admin-source
61+
create_user:
62+
kind: cloud-sql-create-users
63+
source: cloud-sql-admin-source
64+
create_backup:
65+
kind: cloud-sql-create-backup
66+
source: cloud-sql-admin-source
67+
create_instance:
68+
kind: cloud-sql-mssql-create-instance
69+
source: cloud-sql-admin-source
70+
wait_for_operation:
71+
kind: cloud-sql-wait-for-operation
72+
source: cloud-sql-admin-source
73+
multiplier: 4
3674
toolsets:
37-
cloud_sql_mssql_database_tools:
38-
- execute_sql
39-
- list_tables
75+
admin:
76+
- create_instance
77+
- get_instance
78+
- list_instances
79+
- create_database
80+
- list_databases
81+
- create_user
82+
- wait_for_operation
83+
data:
84+
- execute_sql
85+
- list_tables
86+
monitor:
87+
- get_system_metrics
88+
lifecycle:
89+
- create_backup
90+
- restore_backup
91+
- clone_instance
92+
- list_instances
93+
- get_instance
94+
- wait_for_operation

0 commit comments

Comments
 (0)