mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-07-13 19:40:28 -07:00
## Metrics Standardization & Quality Fixes
This PR updates the metrics scripts to resolve lint errors and improve architectural consistency after the conversion to CSV format.
### 🛠 Fixes
1. **Lint Errors**: Resolved 6 `@typescript-eslint/no-unused-vars` errors by removing the unused `MetricOutput` import across the metric suite.
2. **License Standardization**: Removed redundant `@license` tags from all 8 metric scripts to match repository standards.
3. **GraphQL Consistency**: Updated `open_issues.ts` and `open_prs.ts` to use GraphQL variables (`-F`) and the `gh api graphql` pattern used by other scripts, improving security and readability.
4. **Output Consistency**: Migrated `open_issues.ts` and `open_prs.ts` from `console.log` to `process.stdout.write` for unified output behavior.
5. **Robust Execution**: Added `stdio: ['ignore', 'pipe', 'ignore']` to all `execSync` calls to ensure clean output streams and prevent unintentional inheritance of the parent process's stdio.
6. **Code Cleanup**: Removed the now-unused `MetricOutput` interface from `types.ts` and simplified `metrics/index.ts` by removing legacy JSON parsing logic.
### 🧪 Verification
- `npm run lint` now passes for all files in `tools/gemini-cli-bot/metrics/`.
- Validated all 8 scripts manually to ensure they still produce the correct CSV output.
This commit is contained in:
@@ -42,43 +42,16 @@ function processOutputLine(line: string, results: string[]) {
|
||||
const trimmedLine = line.trim();
|
||||
if (!trimmedLine) return;
|
||||
|
||||
let metricName = '';
|
||||
let metricValue = 0;
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(trimmedLine);
|
||||
if (
|
||||
parsed &&
|
||||
typeof parsed === 'object' &&
|
||||
'metric' in parsed &&
|
||||
'value' in parsed
|
||||
) {
|
||||
metricName = parsed.metric;
|
||||
metricValue = parseFloat(parsed.value);
|
||||
results.push(`${metricName},${metricValue}`);
|
||||
} else {
|
||||
const parts = trimmedLine.split(',');
|
||||
if (parts.length === 2) {
|
||||
metricName = parts[0];
|
||||
metricValue = parseFloat(parts[1]);
|
||||
results.push(trimmedLine);
|
||||
} else {
|
||||
results.push(trimmedLine);
|
||||
return; // Unable to parse for deltas
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
const parts = trimmedLine.split(',');
|
||||
if (parts.length === 2) {
|
||||
metricName = parts[0];
|
||||
metricValue = parseFloat(parts[1]);
|
||||
results.push(trimmedLine);
|
||||
} else {
|
||||
results.push(trimmedLine);
|
||||
return; // Unable to parse for deltas
|
||||
}
|
||||
const parts = trimmedLine.split(',');
|
||||
if (parts.length !== 2) {
|
||||
results.push(trimmedLine);
|
||||
return;
|
||||
}
|
||||
|
||||
const metricName = parts[0];
|
||||
const metricValue = parseFloat(parts[1]);
|
||||
results.push(trimmedLine);
|
||||
|
||||
// Calculate and append deltas if the metric is a valid number
|
||||
if (metricName && !isNaN(metricValue)) {
|
||||
const avg7d = getHistoricalAverage(metricName, 7);
|
||||
|
||||
Reference in New Issue
Block a user