blob: 9d7a3e141872f389c6a857867e0e8f650a94e76a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 The Eclipse Foundation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* The Eclipse Foundation - initial API and implementation
*******************************************************************************/
package org.eclipse.epp.usagedata.internal.gathering.monitors;
import org.eclipse.core.runtime.Platform;
import org.eclipse.epp.usagedata.internal.gathering.UsageDataCaptureActivator;
import org.eclipse.epp.usagedata.internal.gathering.services.UsageDataService;
/**
* This monitor captures information about the System. Specifically,
* we capture:
* <ul>
* <li>Operating System</li>
* <li>System Architecture</li>
* <li>Window System</li>
* <li>Locale</li>
* <li>Number of processors available</li>
* <li>And a number of system properties</li>
*
*/
public class SystemInfoMonitor implements UsageMonitor {
private static final String SYSINFO = "sysinfo"; //$NON-NLS-1$
private static final String INFO_PROCESSORS = "processors"; //$NON-NLS-1$
private static final String INFO_LOCALE = "locale"; //$NON-NLS-1$
private static final String INFO_WS = "ws"; //$NON-NLS-1$
private static final String INFO_ARCH = "arch"; //$NON-NLS-1$
private static final String INFO_OS = "os"; //$NON-NLS-1$
/**
* This property contains a list of system properties that
* we obtain the values for.
* <p>
* Many of the system properties contain information like paths
* which may provide us with too much information about a particular
* user. We avoid inadvertently including any of this information
* by being particular about the actual properties we capture.
* AFAIK, none of these properties will likely contain any information
* of a personal nature.
*/
private static final String[] SYSTEM_PROPERTIES = {
"java.runtime.name", //$NON-NLS-1$
"java.runtime.version", //$NON-NLS-1$
"java.specification.name", //$NON-NLS-1$
"java.specification.vendor", //$NON-NLS-1$
"java.specification.version", //$NON-NLS-1$
"java.vendor", //$NON-NLS-1$
"java.version", //$NON-NLS-1$
"java.vm.info", //$NON-NLS-1$
"java.vm.name", //$NON-NLS-1$
"java.vm.specification.name", //$NON-NLS-1$
"java.vm.specification.vendor", //$NON-NLS-1$
"java.vm.specification.version", //$NON-NLS-1$
"java.vm.vendor", //$NON-NLS-1$
"java.vm.version" //$NON-NLS-1$
};
public void startMonitoring(UsageDataService usageDataService) {
/*
* If you look deep enough into the call chain, there is some
* possibility that these Platform.xxx methods can cause a
* runtime exception. We'll catch and log that potential exception.
*/
try {
usageDataService.recordEvent(INFO_OS, SYSINFO, Platform.getOS(), null);
usageDataService.recordEvent(INFO_ARCH, SYSINFO, Platform.getOSArch(), null);
usageDataService.recordEvent(INFO_WS, SYSINFO, Platform.getWS(), null);
usageDataService.recordEvent(INFO_LOCALE, SYSINFO, Platform.getNL(), null);
} catch (Exception e) {
UsageDataCaptureActivator.getDefault().logException("Exception occurred while obtaining platform properties.", e); //$NON-NLS-1$
}
usageDataService.recordEvent(INFO_PROCESSORS, SYSINFO, String.valueOf(Runtime.getRuntime().availableProcessors()), null);
for (String property : SYSTEM_PROPERTIES) {
usageDataService.recordEvent(property, SYSINFO, System.getProperty(property), null);
}
}
public void stopMonitoring() {
}
}