Мониторинг: логи, ошибки и запись экрана портала заявок в 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",
|
"resource": "9232d9e2-9807-4753-808f-07250e5474b0",
|
||||||
"scope": "Reports.Read"
|
"scope": "Reports.Read"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"resource": "9232d9e2-9807-4753-808f-07250e5474b0",
|
||||||
|
"scope": "Logs.Write"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"resource": "Microsoft Flow Service",
|
"resource": "Microsoft Flow Service",
|
||||||
"scope": "Flows.Read.All"
|
"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';
|
} from '@microsoft/sp-property-pane';
|
||||||
import { BaseClientSideWebPart } from '@microsoft/sp-webpart-base';
|
import { BaseClientSideWebPart } from '@microsoft/sp-webpart-base';
|
||||||
import { IReadonlyTheme } from '@microsoft/sp-component-base';
|
import { IReadonlyTheme } from '@microsoft/sp-component-base';
|
||||||
|
import { initMonitoring, spfxTokenProvider } from '@tnsu/monitoring-web';
|
||||||
|
|
||||||
import * as strings from 'RequestPortalWebPartStrings';
|
import * as strings from 'RequestPortalWebPartStrings';
|
||||||
import RequestPortal from './components/RequestPortal';
|
import RequestPortal from './components/RequestPortal';
|
||||||
@@ -62,6 +63,9 @@ export interface IRequestPortalWebPartProps {
|
|||||||
chatSelfNotify?: boolean;
|
chatSelfNotify?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Мониторинг — один на страницу: экземпляров веб-части на странице может быть несколько.
|
||||||
|
let monitoringStarted = false;
|
||||||
|
|
||||||
export default class RequestPortalWebPart extends BaseClientSideWebPart<IRequestPortalWebPartProps> {
|
export default class RequestPortalWebPart extends BaseClientSideWebPart<IRequestPortalWebPartProps> {
|
||||||
|
|
||||||
private _isDarkTheme: boolean = false;
|
private _isDarkTheme: boolean = false;
|
||||||
@@ -98,6 +102,12 @@ export default class RequestPortalWebPart extends BaseClientSideWebPart<IRequest
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected onInit(): Promise<void> {
|
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(); // до всего остального — чтобы поймать и ранние отклонения
|
installErrorLogging(); // до всего остального — чтобы поймать и ранние отклонения
|
||||||
initSP(this.context); // единый клиент PnPjs для записи в списки
|
initSP(this.context); // единый клиент PnPjs для записи в списки
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user