-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathModuleConfig.cfc
108 lines (86 loc) · 4.38 KB
/
ModuleConfig.cfc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
component {
function configure() {
settings = {
'enable' : true,
'installID' : 'jar:https://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent/1.24.0/elastic-apm-agent-1.24.0.jar',
'settings' : {
}
};
}
function onServerStart( required struct interceptData ) {
var job = wirebox.getInstance( 'interactiveJob' );
var serverService = wirebox.getInstance( 'ServerService' );
var configService = wirebox.getInstance( 'ConfigService' );
var systemSettings = wirebox.getInstance( 'SystemSettings' );
var filesystemUtil = wirebox.getInstance( 'filesystem' );
var serverInfo = arguments.interceptData.serverInfo;
var serverJSON = arguments.interceptData.serverJSON;
// Get defaults
var defaults = duplicate( configService.getSetting( 'server.defaults', {} ) );
systemSettings.expandDeepSystemSettings( defaults );
serverInfo.APMEnable = serverJSON.elasticAPM.enable ?: defaults.elasticAPM.enable ?: settings.enable;
if( isBoolean( serverInfo.APMEnable ) && serverInfo.APMEnable ) {
job.addLog( '******************************************' );
job.addLog( '* CommandBox Elastic APM Module Loaded *' );
job.addLog( '******************************************' );
// Get all of our defaulted settings
serverInfo.APMInstallID = serverJSON.elasticAPM.installID ?: defaults.elasticAPM.installID ?: settings.installID;
serverInfo.APMHomeDirectory = ( serverInfo.serverHomeDirectory ?: serverInfo.serverHome ?: serverInfo.webConfigDir & '/' & replace( serverInfo.cfengine, '@', '-' ) ) & '/apm/';
// Optimize installation for the default ForgeBox package
var endpointService = wirebox.getInstance( 'endpointService' );
var packageService = wirebox.getInstance( 'packageService' );
var semanticVersion = wirebox.getInstance( 'semanticVersion@semver' );
var endpointData = endpointService.resolveEndpoint( serverInfo.APMInstallID, 'fake' );
var skipInstall = false;
// Are we installing the "apm" endpoint APMom ForgeBox
if( packageService.isPackage( serverInfo.APMHomeDirectory ) ) {
var APMBoxJSON = packageService.readPackageDescriptor( serverInfo.APMHomeDirectory );
if( ( APMBoxJSON.installPaths ?: {} ).count() ) {
var APMClientBoxJSON = packageService.readPackageDescriptor( serverInfo.APMHomeDirectory.listAppend( APMBoxJSON.installPaths[ APMBoxJSON.installPaths.keyArray().first() ], '/' ) );
var updateData = endpointData.endpoint.getUpdate( serverInfo.APMInstallID, APMClientBoxJSON.version, serverinfo.verbose );
if( !updateData.isOutdated ) {
job.addLog( 'Your Elastic APM version [#APMClientBoxJSON.version#] is already the latest, skipping installation.' );
skipInstall = true;
} else {
job.addLog( 'Your Elastic APM version [#APMClientBoxJSON.version#] does not satisfy [#serverInfo.APMInstallID#]. Installing fresh' );
}
}
}
if( !skipInstall ) {
var APMBoxJSONFile = serverInfo.APMHomeDirectory & 'box.json';
if( fileExists( APMBoxJSONFile ) ) {
fileDelete( APMBoxJSONFile );
}
// install APM jar and debug binaries
packageService.installPackage( id=serverInfo.APMInstallID, directory=serverInfo.APMHomeDirectory, currentWorkingDirectory=serverInfo.APMHomeDirectory, save=true, verbose=serverinfo.verbose );
}
var APMBoxJSON = packageService.readPackageDescriptor( serverInfo.APMHomeDirectory );
// Find the jar, whose name may vary
var qryJarPath = directoryList(
serverInfo.APMHomeDirectory.listAppend( APMBoxJSON.installPaths[ APMBoxJSON.installPaths.keyArray().first() ], '/' ),
false,
'query',
'*.jar',
'name asc',
'file'
);
serverInfo.JVMArgs &= ' "-javaagent:#qryJarPath.directory#/#qryJarPath.name#"';
var apmSettings = defaults.elasticAPM.settings ?: {};
apmSettings.append( settings.settings, true );
apmSettings.append( serverJSON.elasticAPM.settings ?: {}, true );
apmSettings.each( (k,v)=>{
var name = ucase( k );
if( !name.startsWith( 'ELASTIC_APM_' ) ) {
name = 'ELASTIC_APM_' & name;
}
// If this env var already exiss, don't override. Pre-existing env vars shuold always override server.json, config settings, and module defaults
if( systemSettings.getSystemSetting( name, '__NOT_EXISTS__' ) == '__NOT_EXISTS__' ) {
if( serverinfo.verbose ) {
job.addLog( 'Setting env var [#name#].' );
}
systemSettings.setSystemSetting( name, v );
}
} );
}
}
}