Skip to content

Commit 712ea56

Browse files
committed
Cleaning up logging in dataconnecrt:sql:setup
1 parent dfa2ecd commit 712ea56

File tree

5 files changed

+27
-31
lines changed

5 files changed

+27
-31
lines changed

src/commands/dataconnect-sql-grant.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { pickService } from "../dataconnect/fileUtils";
77
import { grantRoleToUserInSchema } from "../dataconnect/schemaMigration";
88
import { requireAuth } from "../requireAuth";
99
import { FirebaseError } from "../error";
10-
import { fdcSqlRoleMap } from "../gcp/cloudsql/permissions_setup";
10+
import { fdcSqlRoleMap } from "../gcp/cloudsql/permissionsSetup";
1111

1212
const allowedRoles = Object.keys(fdcSqlRoleMap);
1313

src/commands/dataconnect-sql-setup.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { FirebaseError } from "../error";
66
import { requireAuth } from "../requireAuth";
77
import { requirePermissions } from "../requirePermissions";
88
import { ensureApis } from "../dataconnect/ensureApis";
9-
import { setupSQLPermissions, getSchemaMetadata } from "../gcp/cloudsql/permissions_setup";
9+
import { setupSQLPermissions, getSchemaMetadata } from "../gcp/cloudsql/permissionsSetup";
1010
import { DEFAULT_SCHEMA } from "../gcp/cloudsql/permissions";
1111
import { getIdentifiers, ensureServiceIsConnectedToCloudSql } from "../dataconnect/schemaMigration";
1212
import { getIAMUser } from "../gcp/cloudsql/connect";

src/dataconnect/schemaMigration.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
setupSQLPermissions,
1818
getSchemaMetadata,
1919
SchemaSetupStatus,
20-
} from "../gcp/cloudsql/permissions_setup";
20+
} from "../gcp/cloudsql/permissionsSetup";
2121
import { DEFAULT_SCHEMA, firebaseowner } from "../gcp/cloudsql/permissions";
2222
import { promptOnce, confirm } from "../prompt";
2323
import { logger } from "../logger";
@@ -27,7 +27,6 @@ import { FirebaseError } from "../error";
2727
import { logLabeledBullet, logLabeledWarning, logLabeledSuccess } from "../utils";
2828
import { iamUserIsCSQLAdmin } from "../gcp/cloudsql/cloudsqladmin";
2929
import * as cloudSqlAdminClient from "../gcp/cloudsql/cloudsqladmin";
30-
3130
import * as errors from "./errors";
3231

3332
async function setupSchemaIfNecessary(
@@ -49,7 +48,7 @@ async function setupSchemaIfNecessary(
4948
/* silent=*/ true,
5049
);
5150
} else {
52-
logger.info(
51+
logger.debug(
5352
`Detected schema "${schemaInfo.name}" is setup in ${schemaInfo.setupStatus} mode. Skipping Setup.`,
5453
);
5554
}

src/gcp/cloudsql/permissions_setup.ts src/gcp/cloudsql/permissionsSetup.ts

+21-24
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import * as clc from "colorette";
2+
13
import { Options } from "../../options";
24
import {
35
firebaseowner,
@@ -8,18 +10,17 @@ import {
810
readerRolePermissions,
911
defaultPermissions,
1012
FIREBASE_SUPER_USER,
11-
CLOUDSQL_SUPER_USER,
1213
} from "./permissions";
1314
import { iamUserIsCSQLAdmin } from "./cloudsqladmin";
1415
import { setupIAMUsers } from "./connect";
1516
import { logger } from "../../logger";
1617
import { confirm } from "../../prompt";
17-
import * as clc from "colorette";
1818
import { FirebaseError } from "../../error";
1919
import { needProjectNumber } from "../../projectUtils";
2020
import { executeSqlCmdsAsIamUser, executeSqlCmdsAsSuperUser, getIAMUser } from "./connect";
2121
import { concat } from "lodash";
2222
import { getDataConnectP4SA, toDatabaseUser } from "./connect";
23+
import * as utils from "../../utils";
2324

2425
export type TableMetadata = {
2526
name: string;
@@ -104,9 +105,10 @@ export async function setupSQLPermissions(
104105
options: Options,
105106
silent: boolean = false,
106107
): Promise<SchemaSetupStatus.BrownField | SchemaSetupStatus.GreenField> {
108+
const logFn = silent ? logger.debug : (message: string) => {return utils.logLabeledBullet('dataconnect', message)};
107109
const schema = schemaInfo.name;
108110
// Step 0: Check current user can run setup and upsert IAM / P4SA users
109-
logger.info(
111+
logFn(
110112
`Detected schema "${schema}" setup status is ${schemaInfo.setupStatus}. Running setup...`,
111113
);
112114

@@ -121,14 +123,14 @@ export async function setupSQLPermissions(
121123
let runGreenfieldSetup = false;
122124
if (schemaInfo.setupStatus === SchemaSetupStatus.GreenField) {
123125
runGreenfieldSetup = true;
124-
logger.info(
126+
logFn(
125127
`Database ${databaseId} has already been setup as greenfield project. Rerunning setup to repair any missing permissions.`,
126128
);
127129
}
128130

129131
if (schemaInfo.tables.length === 0) {
130132
runGreenfieldSetup = true;
131-
logger.info(`Found no tables in schema "${schema}", assuming greenfield project.`);
133+
logFn(`Found no tables in schema "${schema}", assuming greenfield project.`);
132134
}
133135

134136
// We need to setup the database
@@ -148,7 +150,7 @@ export async function setupSQLPermissions(
148150
/** transaction=*/ true,
149151
);
150152

151-
logger.info(clc.green("Database setup complete."));
153+
logFn(clc.green("Database setup complete."));
152154
return SchemaSetupStatus.GreenField;
153155
}
154156

@@ -158,7 +160,7 @@ export async function setupSQLPermissions(
158160
);
159161
}
160162
const currentTablesOwners = [...new Set(schemaInfo.tables.map((t) => t.owner))];
161-
logger.info(
163+
logFn(
162164
`We found some existing object owners [${currentTablesOwners.join(", ")}] in your cloudsql "${schema}" schema.`,
163165
);
164166

@@ -173,22 +175,22 @@ export async function setupSQLPermissions(
173175

174176
if (shouldSetupGreenfield) {
175177
await setupBrownfieldAsGreenfield(instanceId, databaseId, schemaInfo, options, silent);
176-
logger.info(clc.green("Database setup complete."));
177-
logger.info(
178+
logger.info(clc.green("Database setup complete.")); // If we do set up, always at least show this line.
179+
logFn(
178180
clc.yellow(
179181
"IMPORTANT: please uncomment 'schemaValidation: \"COMPATIBLE\"' in your dataconnect.yaml file to avoid dropping any existing tables by mistake.",
180182
),
181183
);
182184
return SchemaSetupStatus.GreenField;
183185
} else {
184-
logger.info(
186+
logFn(
185187
clc.yellow(
186188
"Setting up database in brownfield mode.\n" +
187189
`Note: SQL migrations can't be done through ${clc.bold("firebase dataconnect:sql:migrate")} in this mode.`,
188190
),
189191
);
190192
await brownfieldSqlSetup(instanceId, databaseId, schemaInfo, options, silent);
191-
logger.info(clc.green("Brownfield database setup complete."));
193+
logFn(clc.green("Brownfield database setup complete."));
192194
return SchemaSetupStatus.BrownField;
193195
}
194196
}
@@ -326,13 +328,6 @@ export async function getSchemaMetadata(
326328
};
327329
}
328330

329-
function filterTableOwners(schemaInfo: SchemaMetadata, databaseId: string) {
330-
return [...new Set(schemaInfo.tables.map((t) => t.owner))].filter(
331-
(owner) =>
332-
owner !== CLOUDSQL_SUPER_USER && owner !== firebaseowner(databaseId, schemaInfo.name),
333-
);
334-
}
335-
336331
export async function setupBrownfieldAsGreenfield(
337332
instanceId: string,
338333
databaseId: string,
@@ -343,21 +338,23 @@ export async function setupBrownfieldAsGreenfield(
343338
const schema = schemaInfo.name;
344339

345340
const firebaseOwnerRole = firebaseowner(databaseId, schema);
346-
const uniqueTablesOwners = filterTableOwners(schemaInfo, databaseId);
341+
const nonFirebasetablesOwners = [...new Set(schemaInfo.tables.map((t) => t.owner))].filter(
342+
(owner) => owner !== firebaseOwnerRole,
343+
);
347344

348345
// Grant roles to firebase superuser to avoid missing permissions on tables
349-
const grantOwnersToSuperuserCmds = uniqueTablesOwners.map(
346+
const grantOwnersToSuperuserCmds = nonFirebasetablesOwners.map(
350347
(owner) => `GRANT "${owner}" TO "${FIREBASE_SUPER_USER}"`,
351348
);
352-
const revokeOwnersFromSuperuserCmds = uniqueTablesOwners.map(
349+
const revokeOwnersFromSuperuserCmds = nonFirebasetablesOwners.map(
353350
(owner) => `REVOKE "${owner}" FROM "${FIREBASE_SUPER_USER}"`,
354351
);
355352

356353
// Step 1: Our usual setup which creates necessary roles, transfers schema ownership, and gives nessary grants.
357354
const greenfieldSetupCmds = await greenFieldSchemaSetup(instanceId, databaseId, schema, options);
358355

359356
// Step 2: Grant non firebase owners the writer role before changing the table owners.
360-
const grantCmds = uniqueTablesOwners.map(
357+
const grantCmds = nonFirebasetablesOwners.map(
361358
(owner) => `GRANT "${firebasewriter(databaseId, schema)}" TO "${owner}"`,
362359
);
363360

@@ -394,8 +391,8 @@ export async function brownfieldSqlSetup(
394391
) {
395392
const schema = schemaInfo.name;
396393

397-
// Step 1: Grant firebasesuperuser access to the original owner.
398-
const uniqueTablesOwners = filterTableOwners(schemaInfo, databaseId);
394+
// Step 1: Grant firebasesuperuser access to the original owner
395+
const uniqueTablesOwners = [...new Set(schemaInfo.tables.map((t) => t.owner))];
399396
const grantOwnersToFirebasesuperuser = uniqueTablesOwners.map(
400397
(owner) => `GRANT "${owner}" TO "${FIREBASE_SUPER_USER}"`,
401398
);

src/track.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ function session(propertyName: GA4Property): AnalyticsSession | undefined {
319319
const validateOnly = !!process.env.FIREBASE_CLI_MP_VALIDATE;
320320
if (!usageEnabled() && propertyName !== "vscode") {
321321
if (validateOnly) {
322-
logger.warn("Google Analytics is DISABLED. To enable, (re)login and opt in to collection.");
322+
logger.debug("Google Analytics is DISABLED. To enable, (re)login and opt in to collection.");
323323
}
324324
return;
325325
}
@@ -352,7 +352,7 @@ function isDebugMode(): boolean {
352352
if (account?.user.email.endsWith("@google.com")) {
353353
try {
354354
require("../tsconfig.json");
355-
logger.info(
355+
logger.debug(
356356
`Using Google Analytics in DEBUG mode. Emulators (+ UI) events will be shown in GA Debug View only.`,
357357
);
358358
return true;

0 commit comments

Comments
 (0)