| /******************************************************************************* |
| * Copyright (c) 2008 IBM Corporation. |
| * 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: |
| * IBM Corporation - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.ptp.rm.mpi.mpich2.core.rtsystem; |
| |
| import java.io.BufferedReader; |
| import java.io.IOException; |
| import java.util.regex.Matcher; |
| import java.util.regex.Pattern; |
| |
| import org.eclipse.ptp.rm.core.utils.DebugUtil; |
| |
| /** |
| * |
| * @author Greg Watson |
| * |
| */ |
| public class MPICH2TraceParser { |
| private String errorMessage = null; |
| private MPICH2HostMap map = new MPICH2HostMap(); |
| private static Pattern pattern = Pattern.compile("([^_]+)_([0-9])+ \\(([0-9.]+)\\)"); //$NON-NLS-1$ |
| |
| /** |
| * Parse the output of the mpdtrace command. |
| * |
| * @param reader |
| * @return an MPICH2HostMap containing the known hosts, or null if there was an error |
| * @throws IOException |
| */ |
| public MPICH2HostMap parse(BufferedReader reader) throws IOException { |
| MPICH2TraceParser parser = new MPICH2TraceParser(); |
| String line; |
| while ((line = reader.readLine()) != null) { |
| line = line.trim(); |
| |
| if (line.length()==0) { |
| // Ignore empty line |
| continue; |
| } |
| |
| Matcher matcher = pattern.matcher(line); |
| if (!matcher.matches()) { |
| /* |
| * Probably an error from mpdtrace. Collect lines and mark error. |
| */ |
| errorMessage = ""; //$NON-NLS-1$ |
| |
| while ((line = reader.readLine()) != null) { |
| errorMessage += line + "\n"; //$NON-NLS-1$ |
| } |
| |
| return null; |
| } |
| |
| if (matcher.matches() && matcher.groupCount() == 3) { |
| String host = matcher.group(1); |
| String port = matcher.group(2); |
| String addr = matcher.group(3); |
| parser.map.addHost(host, addr, port); |
| DebugUtil.trace(DebugUtil.RTS_DISCOVER_TRACING, "found host " + host + " addr " + addr + " port " + port); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| } |
| } |
| |
| return parser.map; |
| } |
| |
| /** |
| * @return error message |
| */ |
| public String getErrorMessage() { |
| return errorMessage; |
| } |
| } |
| |