From: Alexandre Montplaisir Date: Wed, 8 Jul 2015 20:15:24 +0000 (-0400) Subject: lttng: Add utility methods to get CTF tracer versions X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=542ddfb36e4d7d11ccd68c461ccac4b285265aa8;p=deliverable%2Ftracecompass.git lttng: Add utility methods to get CTF tracer versions It's not uncommon to check for tracer names and versions of CTF traces. We can offer convenience methods to do so, instead of having to parse the environment metadata every time. Change-Id: I9c4cbc7e36d24d972889f6c4bbc16d2db852f741 Signed-off-by: Alexandre Montplaisir Reviewed-on: https://git.eclipse.org/r/51661 Reviewed-by: Matthew Khouzam Reviewed-by: Hudson CI --- diff --git a/ctf/org.eclipse.tracecompass.tmf.ctf.core/src/org/eclipse/tracecompass/tmf/ctf/core/trace/CtfUtils.java b/ctf/org.eclipse.tracecompass.tmf.ctf.core/src/org/eclipse/tracecompass/tmf/ctf/core/trace/CtfUtils.java new file mode 100644 index 0000000000..0730dab455 --- /dev/null +++ b/ctf/org.eclipse.tracecompass.tmf.ctf.core/src/org/eclipse/tracecompass/tmf/ctf/core/trace/CtfUtils.java @@ -0,0 +1,85 @@ +/******************************************************************************* + * Copyright (c) 2015 EfficiOS Inc., Alexandre Montplaisir + * + * 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 + *******************************************************************************/ + +package org.eclipse.tracecompass.tmf.ctf.core.trace; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; + +/** + * Utility methods for traces in the CTF format. + * + * @author Alexandre Montplaisir + * @since 2.0 + */ +@NonNullByDefault +public final class CtfUtils { + + private CtfUtils() { + } + + /** + * Convenience method to get the tracer name from the trace's metadata. The + * leading and trailing "" will be stripped from the returned string. + * + * @param trace + * The trace to query + * @return The tracer's name, or null if it is not defined in the metadata. + */ + public static @Nullable String getTracerName(CtfTmfTrace trace) { + String str = trace.getEnvironment().get("tracer_name"); //$NON-NLS-1$ + if (str == null) { + return null; + } + /* Remove the "" at the start and end of the string */ + return str.replaceAll("^\"|\"$", ""); //$NON-NLS-1$ //$NON-NLS-2$ + } + + /** + * Convenience method to get the tracer's major version from the trace + * metadata. + * + * @param trace + * The trace to query + * @return The tracer's major version, or -1 if it is not defined. + */ + public static int getTracerMajorVersion(CtfTmfTrace trace) { + String str = trace.getEnvironment().get("tracer_major"); //$NON-NLS-1$ + if (str == null) { + return -1; + } + try { + int ret = Integer.parseInt(str); + return ret; + } catch (NumberFormatException e) { + return -1; + } + } + + /** + * Convenience method to get the tracer's minor version from the trace + * metadata. + * + * @param trace + * The trace to query + * @return The tracer's minor version, or -1 if it is not defined. + */ + public static int getTracerMinorVersion(CtfTmfTrace trace) { + String str = trace.getEnvironment().get("tracer_minor"); //$NON-NLS-1$ + if (str == null) { + return -1; + } + try { + int ret = Integer.parseInt(str); + return ret; + } catch (NumberFormatException e) { + return -1; + } + } +} diff --git a/lttng/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java b/lttng/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java index b3e3c70433..26c7f94f08 100644 --- a/lttng/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java +++ b/lttng/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java @@ -37,6 +37,7 @@ import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus; import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace; import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTraceValidationStatus; +import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfUtils; import com.google.common.collect.ImmutableSet; @@ -106,26 +107,26 @@ public class LttngKernelTrace extends CtfTmfTrace implements IKernelTrace { public void initTrace(IResource resource, String path, Class eventType) throws TmfTraceException { super.initTrace(resource, path, eventType); - fOriginTracer = getTracerFromEnv(this.getEnvironment()); + fOriginTracer = getTracerFromEnv(); } /** * Identify which tracer generated a trace from its metadata. */ - private static OriginTracer getTracerFromEnv(Map traceEnv) { - String tracerName = traceEnv.get("tracer_name"); //$NON-NLS-1$ - String tracerMajor = traceEnv.get("tracer_major"); //$NON-NLS-1$ - String tracerMinor = traceEnv.get("tracer_minor"); //$NON-NLS-1$ + private OriginTracer getTracerFromEnv() { + String tracerName = CtfUtils.getTracerName(this); + int tracerMajor = CtfUtils.getTracerMajorVersion(this); + int tracerMinor = CtfUtils.getTracerMinorVersion(this); - if ("\"perf\"".equals(tracerName)) { //$NON-NLS-1$ + if ("perf".equals(tracerName)) { //$NON-NLS-1$ return OriginTracer.PERF; - } else if ("\"lttng-modules\"".equals(tracerName) && tracerMajor != null && tracerMinor != null) { //$NON-NLS-1$ + } else if ("lttng-modules".equals(tracerName)) { //$NON-NLS-1$ /* Look for specific versions of LTTng */ - if (Integer.valueOf(tracerMajor) >= 2) { - if (Integer.valueOf(tracerMinor) >= 7) { + if (tracerMajor >= 2) { + if (tracerMinor >= 7) { return OriginTracer.LTTNG27; - } else if (Integer.valueOf(tracerMinor) >= 6) { + } else if (tracerMinor >= 6) { return OriginTracer.LTTNG26; } } diff --git a/lttng/org.eclipse.tracecompass.lttng2.ust.core/src/org/eclipse/tracecompass/lttng2/ust/core/trace/LttngUstTrace.java b/lttng/org.eclipse.tracecompass.lttng2.ust.core/src/org/eclipse/tracecompass/lttng2/ust/core/trace/LttngUstTrace.java index dd437a8eee..8c4f9c8904 100644 --- a/lttng/org.eclipse.tracecompass.lttng2.ust.core/src/org/eclipse/tracecompass/lttng2/ust/core/trace/LttngUstTrace.java +++ b/lttng/org.eclipse.tracecompass.lttng2.ust.core/src/org/eclipse/tracecompass/lttng2/ust/core/trace/LttngUstTrace.java @@ -31,6 +31,7 @@ import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus; import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace; import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTraceValidationStatus; +import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfUtils; /** * Class to contain LTTng-UST traces @@ -71,17 +72,17 @@ public class LttngUstTrace extends CtfTmfTrace { super.initTrace(resource, path, eventType); /* Determine the event layout to use from the tracer's version */ - fLayout = getLayoutFromEnv(this.getEnvironment()); + fLayout = getLayoutFromEnv(); } - private static @NonNull ILttngUstEventLayout getLayoutFromEnv(Map traceEnv) { - String tracerName = traceEnv.get("tracer_name"); //$NON-NLS-1$ - String tracerMajor = traceEnv.get("tracer_major"); //$NON-NLS-1$ - String tracerMinor = traceEnv.get("tracer_minor"); //$NON-NLS-1$ + private @NonNull ILttngUstEventLayout getLayoutFromEnv() { + String tracerName = CtfUtils.getTracerName(this); + int tracerMajor = CtfUtils.getTracerMajorVersion(this); + int tracerMinor = CtfUtils.getTracerMinorVersion(this); - if ("\"lttng-ust\"".equals(tracerName) && tracerMajor != null && tracerMinor != null) { //$NON-NLS-1$ - if (Integer.valueOf(tracerMajor) >= 2) { - if (Integer.valueOf(tracerMinor) >= 7) { + if ("lttng-ust".equals(tracerName)) { //$NON-NLS-1$ + if (tracerMajor >= 2) { + if (tracerMinor >= 7) { return LttngUst27EventLayout.getInstance(); } return LttngUst20EventLayout.getInstance();