Skip to content

Commit aa461e1

Browse files
authored
add trace logging to NativePolicyService (microsoft#166462)
related to microsoft#163418
1 parent 3813f98 commit aa461e1

File tree

7 files changed

+42
-31
lines changed

7 files changed

+42
-31
lines changed

src/vs/code/electron-main/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ class CodeMain {
188188
services.set(IUserDataProfilesMainService, userDataProfilesMainService);
189189

190190
// Policy
191-
const policyService = isWindows && productService.win32RegValueName ? disposables.add(new NativePolicyService(productService.win32RegValueName))
191+
const policyService = isWindows && productService.win32RegValueName ? disposables.add(new NativePolicyService(logService, productService.win32RegValueName))
192192
: environmentMainService.policyFile ? disposables.add(new FilePolicyService(environmentMainService.policyFile, fileService, logService))
193193
: new NullPolicyService();
194194
services.set(IPolicyService, policyService);

src/vs/code/node/cliProcessMain.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ class CliMain extends Disposable {
153153
services.set(IUserDataProfilesService, userDataProfilesService);
154154

155155
// Policy
156-
const policyService = isWindows && productService.win32RegValueName ? this._register(new NativePolicyService(productService.win32RegValueName))
156+
const policyService = isWindows && productService.win32RegValueName ? this._register(new NativePolicyService(logService, productService.win32RegValueName))
157157
: environmentService.policyFile ? this._register(new FilePolicyService(environmentService.policyFile, fileService, logService))
158158
: new NullPolicyService();
159159
services.set(IPolicyService, policyService);

src/vs/platform/configuration/common/configurations.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,13 @@ export class PolicyConfiguration extends Disposable implements IPolicyConfigurat
107107
}
108108

109109
async initialize(): Promise<ConfigurationModel> {
110-
this.update(await this.registerPolicyDefinitions(this.defaultConfiguration.configurationModel.keys), false);
110+
this.update(await this.updatePolicyDefinitions(this.defaultConfiguration.configurationModel.keys), false);
111111
this._register(this.policyService.onDidChange(policyNames => this.onDidChangePolicies(policyNames)));
112-
this._register(this.defaultConfiguration.onDidChangeConfiguration(async ({ properties }) => this.update(await this.registerPolicyDefinitions(properties), true)));
112+
this._register(this.defaultConfiguration.onDidChangeConfiguration(async ({ properties }) => this.update(await this.updatePolicyDefinitions(properties), true)));
113113
return this._configurationModel;
114114
}
115115

116-
private async registerPolicyDefinitions(properties: string[]): Promise<string[]> {
116+
private async updatePolicyDefinitions(properties: string[]): Promise<string[]> {
117117
const policyDefinitions: IStringDictionary<PolicyDefinition> = {};
118118
const keys: string[] = [];
119119
const configurationProperties = Registry.as<IConfigurationRegistry>(Extensions.Configuration).getConfigurationProperties();
@@ -136,7 +136,7 @@ export class PolicyConfiguration extends Disposable implements IPolicyConfigurat
136136
}
137137

138138
if (!isEmptyObject(policyDefinitions)) {
139-
await this.policyService.registerPolicyDefinitions(policyDefinitions);
139+
await this.policyService.updatePolicyDefinitions(policyDefinitions);
140140
}
141141

142142
return keys;

src/vs/platform/policy/common/filePolicyService.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { ThrottledDelayer } from 'vs/base/common/async';
7-
import { IStringDictionary } from 'vs/base/common/collections';
87
import { Event } from 'vs/base/common/event';
98
import { Iterable } from 'vs/base/common/iterator';
109
import { isObject } from 'vs/base/common/types';
1110
import { URI } from 'vs/base/common/uri';
1211
import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files';
1312
import { ILogService } from 'vs/platform/log/common/log';
14-
import { AbstractPolicyService, IPolicyService, PolicyDefinition, PolicyName, PolicyValue } from 'vs/platform/policy/common/policy';
13+
import { AbstractPolicyService, IPolicyService, PolicyName, PolicyValue } from 'vs/platform/policy/common/policy';
1514

1615
function keysDiff<T>(a: Map<string, T>, b: Map<string, T>): string[] {
1716
const result: string[] = [];
@@ -41,7 +40,7 @@ export class FilePolicyService extends AbstractPolicyService implements IPolicyS
4140
this._register(onDidChangePolicyFile(() => this.throttledDelayer.trigger(() => this.refresh())));
4241
}
4342

44-
protected async initializePolicies(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<void> {
43+
protected async _updatePolicyDefinitions(): Promise<void> {
4544
await this.refresh();
4645
}
4746

src/vs/platform/policy/common/policy.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export interface IPolicyService {
1919
readonly _serviceBrand: undefined;
2020

2121
readonly onDidChange: Event<readonly PolicyName[]>;
22-
registerPolicyDefinitions(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<IStringDictionary<PolicyValue>>;
22+
updatePolicyDefinitions(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<IStringDictionary<PolicyValue>>;
2323
getPolicyValue(name: PolicyName): PolicyValue | undefined;
2424
serialize(): IStringDictionary<{ definition: PolicyDefinition; value: PolicyValue }> | undefined;
2525
}
@@ -33,12 +33,12 @@ export abstract class AbstractPolicyService extends Disposable implements IPolic
3333
protected readonly _onDidChange = this._register(new Emitter<readonly PolicyName[]>());
3434
readonly onDidChange = this._onDidChange.event;
3535

36-
async registerPolicyDefinitions(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<IStringDictionary<PolicyValue>> {
36+
async updatePolicyDefinitions(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<IStringDictionary<PolicyValue>> {
3737
const size = Object.keys(this.policyDefinitions).length;
3838
this.policyDefinitions = { ...policyDefinitions, ...this.policyDefinitions };
3939

4040
if (size !== Object.keys(this.policyDefinitions).length) {
41-
await this.initializePolicies(policyDefinitions);
41+
await this._updatePolicyDefinitions(policyDefinitions);
4242
}
4343

4444
return Iterable.reduce(this.policies.entries(), (r, [name, value]) => ({ ...r, [name]: value }), {});
@@ -52,13 +52,13 @@ export abstract class AbstractPolicyService extends Disposable implements IPolic
5252
return Iterable.reduce<[PolicyName, PolicyDefinition], IStringDictionary<{ definition: PolicyDefinition; value: PolicyValue }>>(Object.entries(this.policyDefinitions), (r, [name, definition]) => ({ ...r, [name]: { definition, value: this.policies.get(name)! } }), {});
5353
}
5454

55-
protected abstract initializePolicies(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<void>;
55+
protected abstract _updatePolicyDefinitions(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<void>;
5656
}
5757

5858
export class NullPolicyService implements IPolicyService {
5959
readonly _serviceBrand: undefined;
6060
readonly onDidChange = Event.None;
61-
async registerPolicyDefinitions() { return {}; }
61+
async updatePolicyDefinitions() { return {}; }
6262
getPolicyValue() { return undefined; }
6363
serialize() { return undefined; }
6464
}

src/vs/platform/policy/common/policyIpc.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export class PolicyChannel implements IServerChannel {
2929

3030
call(_: unknown, command: string, arg?: any): Promise<any> {
3131
switch (command) {
32-
case 'registerPolicyDefinitions': return this.service.registerPolicyDefinitions(arg as IStringDictionary<PolicyDefinition>);
32+
case 'updatePolicyDefinitions': return this.service.updatePolicyDefinitions(arg as IStringDictionary<PolicyDefinition>);
3333
}
3434

3535
throw new Error(`Call not found: ${command}`);
@@ -66,8 +66,8 @@ export class PolicyChannelClient extends AbstractPolicyService implements IPolic
6666
});
6767
}
6868

69-
protected async initializePolicies(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<void> {
70-
const result = await this.channel.call<{ [name: PolicyName]: PolicyValue }>('registerPolicyDefinitions', policyDefinitions);
69+
protected async _updatePolicyDefinitions(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<void> {
70+
const result = await this.channel.call<{ [name: PolicyName]: PolicyValue }>('updatePolicyDefinitions', policyDefinitions);
7171
for (const name in result) {
7272
this.policies.set(name, result[name]);
7373
}

src/vs/platform/policy/node/nativePolicyService.ts

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,39 +6,51 @@
66
import { AbstractPolicyService, IPolicyService, PolicyDefinition } from 'vs/platform/policy/common/policy';
77
import { IStringDictionary } from 'vs/base/common/collections';
88
import { Throttler } from 'vs/base/common/async';
9-
import { createWatcher, Watcher } from 'vscode-policy-watcher';
9+
import { createWatcher, PolicyUpdate, Watcher } from 'vscode-policy-watcher';
1010
import { MutableDisposable } from 'vs/base/common/lifecycle';
11+
import { ILogService } from 'vs/platform/log/common/log';
1112

1213
export class NativePolicyService extends AbstractPolicyService implements IPolicyService {
1314

1415
private throttler = new Throttler();
1516
private watcher = this._register(new MutableDisposable<Watcher>());
1617

17-
constructor(private readonly productName: string) {
18+
constructor(
19+
@ILogService private readonly logService: ILogService,
20+
private readonly productName: string
21+
) {
1822
super();
1923
}
2024

21-
protected async initializePolicies(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<void> {
25+
protected async _updatePolicyDefinitions(policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<void> {
26+
this.logService.trace(`NativePolicyService#_updatePolicyDefinitions - Found ${policyDefinitions.length} policy definitions`);
27+
2228
await this.throttler.queue(() => new Promise<void>((c, e) => {
2329
try {
2430
this.watcher.value = createWatcher(this.productName, policyDefinitions, update => {
25-
for (const key in update) {
26-
const value = update[key] as any;
27-
28-
if (value === undefined) {
29-
this.policies.delete(key);
30-
} else {
31-
this.policies.set(key, value);
32-
}
33-
}
34-
35-
this._onDidChange.fire(Object.keys(update));
31+
this._onDidPolicyChange(update);
3632
c();
3733
});
3834
} catch (err) {
35+
this.logService.error(`NativePolicyService#_updatePolicyDefinitions - Error creating watcher:`, err);
3936
e(err);
4037
}
4138
}));
4239
}
4340

41+
private _onDidPolicyChange(update: PolicyUpdate<IStringDictionary<PolicyDefinition>>): void {
42+
this.logService.trace(`NativePolicyService#_onDidPolicyChange - Updated policy values: ${Object.keys(update).join(', ')}`);
43+
44+
for (const key in update) {
45+
const value = update[key] as any;
46+
47+
if (value === undefined) {
48+
this.policies.delete(key);
49+
} else {
50+
this.policies.set(key, value);
51+
}
52+
}
53+
54+
this._onDidChange.fire(Object.keys(update));
55+
}
4456
}

0 commit comments

Comments
 (0)