Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
1f74e3c5
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1f74e3c5
编写于
6月 07, 2016
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
simplify appender, telemetry service config
上级
273e8857
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
64 addition
and
53 deletion
+64
-53
src/vs/platform/telemetry/common/telemetry.ts
src/vs/platform/telemetry/common/telemetry.ts
+8
-0
src/vs/platform/telemetry/common/telemetryService.ts
src/vs/platform/telemetry/common/telemetryService.ts
+25
-25
src/vs/platform/telemetry/node/appInsightsAppender.ts
src/vs/platform/telemetry/node/appInsightsAppender.ts
+7
-4
src/vs/platform/telemetry/test/node/telemetryService.test.ts
src/vs/platform/telemetry/test/node/telemetryService.test.ts
+23
-23
src/vs/workbench/electron-browser/shell.ts
src/vs/workbench/electron-browser/shell.ts
+1
-1
未找到文件。
src/vs/platform/telemetry/common/telemetry.ts
浏览文件 @
1f74e3c5
...
...
@@ -54,6 +54,14 @@ export interface ITelemetryAppender extends IDisposable {
log
(
eventName
:
string
,
data
?:
any
):
any
;
}
export
function
combinedAppender
(...
appenders
:
ITelemetryAppender
[]):
ITelemetryAppender
{
const
log
=
(
e
,
d
)
=>
appenders
.
forEach
(
a
=>
a
.
log
(
e
,
d
));
const
dispose
=
()
=>
appenders
.
forEach
(
a
=>
a
.
dispose
());
return
{
log
,
dispose
};
}
export
const
NullAppender
=
combinedAppender
();
// --- util
export
function
anonymize
(
input
:
string
):
string
{
...
...
src/vs/platform/telemetry/common/telemetryService.ts
浏览文件 @
1f74e3c5
...
...
@@ -18,7 +18,7 @@ import {cloneAndChange, mixin} from 'vs/base/common/objects';
import
{
Registry
}
from
'
vs/platform/platform
'
;
export
interface
ITelemetryServiceConfig
{
appender
:
ITelemetryAppender
[]
;
appender
:
ITelemetryAppender
;
commonProperties
?:
TPromise
<
{
[
name
:
string
]:
any
}
>
;
piiPaths
?:
string
[];
userOptIn
?:
boolean
;
...
...
@@ -26,12 +26,16 @@ export interface ITelemetryServiceConfig {
export
class
TelemetryService
implements
ITelemetryService
{
public
static
IDLE_START_EVENT_NAME
=
'
UserIdleStart
'
;
public
static
IDLE_STOP_EVENT_NAME
=
'
UserIdleStop
'
;
static
IDLE_START_EVENT_NAME
=
'
UserIdleStart
'
;
static
IDLE_STOP_EVENT_NAME
=
'
UserIdleStop
'
;
public
serviceId
=
ITelemetryService
;
serviceId
=
ITelemetryService
;
private
_appender
:
ITelemetryAppender
;
private
_commonProperties
:
TPromise
<
{
[
name
:
string
]:
any
;
}
>
;
private
_piiPaths
:
string
[];
private
_userOptIn
:
boolean
;
private
_configuration
:
ITelemetryServiceConfig
;
private
_disposables
:
IDisposable
[]
=
[];
private
_timeKeeper
:
TimeKeeper
;
private
_cleanupPatterns
:
[
RegExp
,
string
][]
=
[];
...
...
@@ -40,18 +44,16 @@ export class TelemetryService implements ITelemetryService {
config
:
ITelemetryServiceConfig
,
@
optional
(
IConfigurationService
)
private
_configurationService
:
IConfigurationService
)
{
this
.
_configuration
=
mixin
(
config
,
<
ITelemetryServiceConfig
>
{
appender
:
[],
commonProperties
:
TPromise
.
as
({}),
piiPaths
:
[],
userOptIn
:
true
},
false
);
this
.
_appender
=
config
.
appender
;
this
.
_commonProperties
=
config
.
commonProperties
||
TPromise
.
as
({});
this
.
_piiPaths
=
config
.
piiPaths
||
[];
this
.
_userOptIn
=
typeof
config
.
userOptIn
===
'
undefined
'
?
true
:
config
.
userOptIn
;
// static cleanup patterns for:
// #1 `file:///DANGEROUS/PATH/resources/app/Useful/Information`
// #2 // Any other file path that doesn't match the approved form above should be cleaned.
// #3 "Error: ENOENT; no such file or directory" is often followed with PII, clean it
for
(
let
piiPath
of
this
.
_
configuration
.
piiPaths
)
{
for
(
let
piiPath
of
this
.
_piiPaths
)
{
this
.
_cleanupPatterns
.
push
([
new
RegExp
(
escapeRegExpCharacters
(
piiPath
),
'
gi
'
),
''
]);
}
this
.
_cleanupPatterns
.
push
(
...
...
@@ -67,13 +69,13 @@ export class TelemetryService implements ITelemetryService {
if
(
this
.
_configurationService
)
{
this
.
_updateUserOptIn
();
this
.
_configurationService
.
onDidUpdateConfiguration
(
this
.
_updateUserOptIn
,
this
,
this
.
_disposables
);
this
.
publicLog
(
'
optInStatus
'
,
{
optIn
:
this
.
_
configuration
.
userOptIn
});
this
.
publicLog
(
'
optInStatus
'
,
{
optIn
:
this
.
_userOptIn
});
}
}
private
_updateUserOptIn
():
void
{
const
config
=
this
.
_configurationService
.
getConfiguration
<
any
>
(
TELEMETRY_SECTION_ID
);
this
.
_
configuration
.
userOptIn
=
config
?
config
.
enableTelemetry
:
this
.
_configuration
.
userOptIn
;
this
.
_
userOptIn
=
config
?
config
.
enableTelemetry
:
this
.
_
userOptIn
;
}
private
_onTelemetryTimerEventStop
(
events
:
ITimerEvent
[]):
void
{
...
...
@@ -86,11 +88,11 @@ export class TelemetryService implements ITelemetryService {
}
get
isOptedIn
():
boolean
{
return
this
.
_
configuration
.
userOptIn
;
return
this
.
_userOptIn
;
}
public
getTelemetryInfo
():
TPromise
<
ITelemetryInfo
>
{
return
this
.
_co
nfiguration
.
co
mmonProperties
.
then
(
values
=>
{
getTelemetryInfo
():
TPromise
<
ITelemetryInfo
>
{
return
this
.
_commonProperties
.
then
(
values
=>
{
// well known properties
let
sessionId
=
values
[
'
sessionID
'
];
let
instanceId
=
values
[
'
common.instanceId
'
];
...
...
@@ -100,11 +102,11 @@ export class TelemetryService implements ITelemetryService {
});
}
public
dispose
():
void
{
dispose
():
void
{
this
.
_disposables
=
dispose
(
this
.
_disposables
);
}
public
timedPublicLog
(
name
:
string
,
data
?:
any
):
ITimerEvent
{
timedPublicLog
(
name
:
string
,
data
?:
any
):
ITimerEvent
{
let
topic
=
'
public
'
;
let
event
=
this
.
_timeKeeper
.
start
(
topic
,
name
);
if
(
data
)
{
...
...
@@ -113,13 +115,13 @@ export class TelemetryService implements ITelemetryService {
return
event
;
}
public
public
Log
(
eventName
:
string
,
data
?:
any
):
TPromise
<
any
>
{
publicLog
(
eventName
:
string
,
data
?:
any
):
TPromise
<
any
>
{
// don't send events when the user is optout unless the event is the opt{in|out} signal
if
(
!
this
.
_
configuration
.
userOptIn
&&
eventName
!==
'
optInStatus
'
)
{
if
(
!
this
.
_userOptIn
&&
eventName
!==
'
optInStatus
'
)
{
return
TPromise
.
as
(
undefined
);
}
return
this
.
_co
nfiguration
.
co
mmonProperties
.
then
(
values
=>
{
return
this
.
_commonProperties
.
then
(
values
=>
{
// (first) add common properties
data
=
mixin
(
data
,
values
);
...
...
@@ -131,9 +133,7 @@ export class TelemetryService implements ITelemetryService {
}
});
for
(
let
appender
of
this
.
_configuration
.
appender
)
{
appender
.
log
(
eventName
,
data
);
}
this
.
_appender
.
log
(
eventName
,
data
);
},
err
=>
{
// unsure what to do now...
...
...
src/vs/platform/telemetry/node/appInsightsAppender.ts
浏览文件 @
1f74e3c5
...
...
@@ -5,19 +5,22 @@
'
use strict
'
;
import
{
IEnvironment
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
ITelemetryAppender
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
ITelemetryAppender
,
combinedAppender
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
createAIAdapter
}
from
'
vs/base/parts/ai/node/ai
'
;
const
eventPrefix
=
'
monacoworkbench
'
;
export
function
createAppender
(
env
:
IEnvironment
):
ITelemetryAppender
[]
{
export
function
createAppender
(
env
:
IEnvironment
):
ITelemetryAppender
{
const
result
:
ITelemetryAppender
[]
=
[];
let
{
key
,
asimovKey
}
=
env
.
aiConfig
;
const
{
key
,
asimovKey
}
=
env
.
aiConfig
;
if
(
key
)
{
result
.
push
(
createAIAdapter
(
key
,
eventPrefix
,
undefined
));
}
if
(
asimovKey
)
{
result
.
push
(
createAIAdapter
(
asimovKey
,
eventPrefix
,
undefined
));
}
return
result
;
return
combinedAppender
(...
result
);
}
src/vs/platform/telemetry/test/node/telemetryService.test.ts
浏览文件 @
1f74e3c5
...
...
@@ -85,7 +85,7 @@ suite('TelemetryService', () => {
test
(
'
Disposing
'
,
sinon
.
test
(
function
()
{
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
return
service
.
publicLog
(
'
testPrivateEvent
'
).
then
(()
=>
{
assert
.
equal
(
testAppender
.
getEventsCount
(),
1
);
...
...
@@ -98,7 +98,7 @@ suite('TelemetryService', () => {
// event reporting
test
(
'
Simple event
'
,
sinon
.
test
(
function
()
{
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
return
service
.
publicLog
(
'
testEvent
'
).
then
(
_
=>
{
assert
.
equal
(
testAppender
.
getEventsCount
(),
1
);
...
...
@@ -111,7 +111,7 @@ suite('TelemetryService', () => {
test
(
'
Event with data
'
,
sinon
.
test
(
function
()
{
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
return
service
.
publicLog
(
'
testEvent
'
,
{
'
stringProp
'
:
'
property
'
,
...
...
@@ -137,7 +137,7 @@ suite('TelemetryService', () => {
test
(
'
common properties added to *all* events, simple event
'
,
function
()
{
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
,
appender
:
testAppender
,
commonProperties
:
TPromise
.
as
({
foo
:
'
JA!
'
,
get
bar
()
{
return
Math
.
random
();
}
})
},
undefined
);
...
...
@@ -155,7 +155,7 @@ suite('TelemetryService', () => {
test
(
'
common properties added to *all* events, event with data
'
,
function
()
{
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
,
appender
:
testAppender
,
commonProperties
:
TPromise
.
as
({
foo
:
'
JA!
'
,
get
bar
()
{
return
Math
.
random
();
}
})
},
undefined
);
...
...
@@ -174,7 +174,7 @@ suite('TelemetryService', () => {
test
(
'
TelemetryInfo comes from properties
'
,
function
()
{
let
service
=
new
TelemetryService
({
appender
:
[]
,
appender
:
Telemetry
.
NullAppender
,
commonProperties
:
TPromise
.
as
({
sessionID
:
'
one
'
,
[
'
common.instanceId
'
]:
'
two
'
,
...
...
@@ -195,7 +195,7 @@ suite('TelemetryService', () => {
Timer
.
ENABLE_TIMER
=
true
;
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
let
t1
=
service
.
timedPublicLog
(
'
editorDance
'
);
this
.
clock
.
tick
(
20
);
...
...
@@ -227,7 +227,7 @@ suite('TelemetryService', () => {
test
(
'
enableTelemetry on by default
'
,
sinon
.
test
(
function
()
{
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
return
service
.
publicLog
(
'
testEvent
'
).
then
(()
=>
{
assert
.
equal
(
testAppender
.
getEventsCount
(),
1
);
...
...
@@ -244,7 +244,7 @@ suite('TelemetryService', () => {
try
{
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
...
...
@@ -300,7 +300,7 @@ suite('TelemetryService', () => {
let
errorStub
=
this
.
stub
(
window
,
'
onerror
'
);
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
let
testError
=
new
Error
(
'
test
'
);
...
...
@@ -326,7 +326,7 @@ suite('TelemetryService', () => {
let
errorStub
=
this
.
stub
(
window
,
'
onerror
'
);
let
settings
=
new
ErrorTestingSettings
();
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
let
dangerousFilenameError
:
any
=
new
Error
(
'
dangerousFilename
'
);
...
...
@@ -356,7 +356,7 @@ suite('TelemetryService', () => {
try
{
let
settings
=
new
ErrorTestingSettings
();
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
let
dangerousPathWithoutImportantInfoError
:
any
=
new
Error
(
settings
.
dangerousPathWithoutImportantInfo
);
...
...
@@ -384,7 +384,7 @@ suite('TelemetryService', () => {
let
errorStub
=
this
.
stub
(
window
,
'
onerror
'
);
let
settings
=
new
ErrorTestingSettings
();
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
let
dangerousPathWithoutImportantInfoError
:
any
=
new
Error
(
'
dangerousPathWithoutImportantInfo
'
);
...
...
@@ -413,7 +413,7 @@ suite('TelemetryService', () => {
try
{
let
settings
=
new
ErrorTestingSettings
();
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
let
dangerousPathWithImportantInfoError
:
any
=
new
Error
(
settings
.
dangerousPathWithImportantInfo
);
...
...
@@ -444,7 +444,7 @@ suite('TelemetryService', () => {
let
errorStub
=
this
.
stub
(
window
,
'
onerror
'
);
let
settings
=
new
ErrorTestingSettings
();
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
let
dangerousPathWithImportantInfoError
:
any
=
new
Error
(
'
dangerousPathWithImportantInfo
'
);
...
...
@@ -475,7 +475,7 @@ suite('TelemetryService', () => {
try
{
let
settings
=
new
ErrorTestingSettings
();
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
let
missingModelError
:
any
=
new
Error
(
settings
.
missingModelMessage
);
...
...
@@ -506,7 +506,7 @@ suite('TelemetryService', () => {
let
errorStub
=
this
.
stub
(
window
,
'
onerror
'
);
let
settings
=
new
ErrorTestingSettings
();
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
let
missingModelError
:
any
=
new
Error
(
'
missingModelMessage
'
);
...
...
@@ -538,7 +538,7 @@ suite('TelemetryService', () => {
try
{
let
settings
=
new
ErrorTestingSettings
();
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
let
noSuchFileError
:
any
=
new
Error
(
settings
.
noSuchFileMessage
);
...
...
@@ -573,7 +573,7 @@ suite('TelemetryService', () => {
let
errorStub
=
this
.
stub
(
window
,
'
onerror
'
);
let
settings
=
new
ErrorTestingSettings
();
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
appender
:
testAppender
},
undefined
);
const
errorTelemetry
=
new
ErrorTelemetry
(
service
);
let
noSuchFileError
:
any
=
new
Error
(
'
noSuchFileMessage
'
);
...
...
@@ -603,7 +603,7 @@ suite('TelemetryService', () => {
test
(
'
Telemetry Service respects user opt-in settings
'
,
sinon
.
test
(
function
()
{
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
userOptIn
:
false
,
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
userOptIn
:
false
,
appender
:
testAppender
},
undefined
);
return
service
.
publicLog
(
'
testEvent
'
).
then
(()
=>
{
assert
.
equal
(
testAppender
.
getEventsCount
(),
0
);
...
...
@@ -613,7 +613,7 @@ suite('TelemetryService', () => {
test
(
'
Telemetry Service sends events when enableTelemetry is on even user optin is on
'
,
sinon
.
test
(
function
()
{
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
userOptIn
:
true
,
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
userOptIn
:
true
,
appender
:
testAppender
},
undefined
);
return
service
.
publicLog
(
'
testEvent
'
).
then
(()
=>
{
assert
.
equal
(
testAppender
.
getEventsCount
(),
1
);
...
...
@@ -623,7 +623,7 @@ suite('TelemetryService', () => {
test
(
'
Telemetry Service allows optin friendly events
'
,
sinon
.
test
(
function
()
{
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
userOptIn
:
false
,
appender
:
[
testAppender
]
},
undefined
);
let
service
=
new
TelemetryService
({
userOptIn
:
false
,
appender
:
testAppender
},
undefined
);
return
service
.
publicLog
(
'
testEvent
'
).
then
(()
=>
{
assert
.
equal
(
testAppender
.
getEventsCount
(),
0
);
...
...
@@ -643,7 +643,7 @@ suite('TelemetryService', () => {
let
testAppender
=
new
TestTelemetryAppender
();
let
service
=
new
TelemetryService
({
appender
:
[
testAppender
]
appender
:
testAppender
},
{
serviceId
:
undefined
,
hasWorkspaceConfiguration
()
{
...
...
src/vs/workbench/electron-browser/shell.ts
浏览文件 @
1f74e3c5
...
...
@@ -234,7 +234,7 @@ export class WorkbenchShell {
:
TelemetryService
.
IDLE_START_EVENT_NAME
));
disposables
.
add
(
telemetryService
,
errorTelemetry
,
listener
,
idleMonitor
,
...
appender
);
disposables
.
add
(
telemetryService
,
errorTelemetry
,
listener
,
idleMonitor
,
appender
);
}
else
{
this
.
telemetryService
=
NullTelemetryService
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录