Мониторинг: логи, ошибки и запись экрана портала заявок в monitoring.tnsu.kz
initMonitoring в onInit веб-части (один раз на страницу), service.name = requestPortal, токен — молча через AAD веб-части (spfxTokenProvider). В package-solution.json запрос Logs.Write к регистрации мониторинга. Хэш коммита сборки — патч webpack (config/webpack-patch.json): GIT_COMMIT, GITHUB_SHA или git. Пакет @tnsu/monitoring-web ставится отдельно. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -30,6 +30,10 @@
|
||||
"resource": "9232d9e2-9807-4753-808f-07250e5474b0",
|
||||
"scope": "Reports.Read"
|
||||
},
|
||||
{
|
||||
"resource": "9232d9e2-9807-4753-808f-07250e5474b0",
|
||||
"scope": "Logs.Write"
|
||||
},
|
||||
{
|
||||
"resource": "Microsoft Flow Service",
|
||||
"scope": "Flows.Read.All"
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"$schema": "https://developer.microsoft.com/json-schemas/spfx-build/webpack-patch.schema.json",
|
||||
"patchFiles": ["./config/webpack-patch/monitoring.js"]
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
// Хэш коммита сборки — в логи (git.commit) и записи экрана мониторинга: @tnsu/monitoring-web читает
|
||||
// __TNSU_GIT_COMMIT__, а webpack подставляет его при сборке. Хэш — GIT_COMMIT или GITHUB_SHA пайплайна, иначе git.
|
||||
const { execSync } = require('node:child_process');
|
||||
const webpack = require('webpack');
|
||||
|
||||
function gitCommit() {
|
||||
const fromEnv = process.env.GIT_COMMIT || process.env.GITHUB_SHA;
|
||||
if (fromEnv) return fromEnv;
|
||||
try {
|
||||
return execSync('git rev-parse HEAD', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim();
|
||||
} catch {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function monitoringPatch(config) {
|
||||
config.plugins = config.plugins || [];
|
||||
config.plugins.push(new webpack.DefinePlugin({ __TNSU_GIT_COMMIT__: JSON.stringify(gitCommit()) }));
|
||||
return config;
|
||||
};
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
} from '@microsoft/sp-property-pane';
|
||||
import { BaseClientSideWebPart } from '@microsoft/sp-webpart-base';
|
||||
import { IReadonlyTheme } from '@microsoft/sp-component-base';
|
||||
import { initMonitoring, spfxTokenProvider } from '@tnsu/monitoring-web';
|
||||
|
||||
import * as strings from 'RequestPortalWebPartStrings';
|
||||
import RequestPortal from './components/RequestPortal';
|
||||
@@ -62,6 +63,9 @@ export interface IRequestPortalWebPartProps {
|
||||
chatSelfNotify?: boolean;
|
||||
}
|
||||
|
||||
// Мониторинг — один на страницу: экземпляров веб-части на странице может быть несколько.
|
||||
let monitoringStarted = false;
|
||||
|
||||
export default class RequestPortalWebPart extends BaseClientSideWebPart<IRequestPortalWebPartProps> {
|
||||
|
||||
private _isDarkTheme: boolean = false;
|
||||
@@ -98,6 +102,12 @@ export default class RequestPortalWebPart extends BaseClientSideWebPart<IRequest
|
||||
}
|
||||
|
||||
protected onInit(): Promise<void> {
|
||||
// Логи, ошибки, console.error и запись экрана в мониторинг (monitoring.tnsu.kz). Токен — молча через
|
||||
// AAD веб-части (разрешение Logs.Write в package-solution.json); при отладке в workbench окружение — development.
|
||||
if (!monitoringStarted) {
|
||||
monitoringStarted = true;
|
||||
initMonitoring({ service: 'requestPortal', getAccessToken: spfxTokenProvider(this.context.aadTokenProviderFactory) });
|
||||
}
|
||||
installErrorLogging(); // до всего остального — чтобы поймать и ранние отклонения
|
||||
initSP(this.context); // единый клиент PnPjs для записи в списки
|
||||
|
||||
|
||||
Reference in New Issue
Block a user