/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.iwave.ext.linux.command.parser; import java.util.List; import java.util.Map; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import com.google.common.collect.Lists; import com.iwave.ext.linux.model.IScsiHost; import com.iwave.ext.text.TextParser; //Host Number: 22 //State: running //Transport: tcp //Initiatorname: <empty> //IPaddress: 10.200.0.90 //HWaddress: <empty> //Netdev: <empty> //********* //Sessions: //********* //Target: iqn.1992-04.com.emc:cx.apm00113903177.a3 // Current Portal: 10.200.0.102:3260,2 // Persistent Portal: 10.200.0.102:3260,2 // ********** // Interface: // ********** // Iface Name: default // Iface Transport: tcp // Iface Initiatorname: iqn.1996-04.de.suse:01:ce24157495dc // Iface IPaddress: 10.200.0.90 // Iface HWaddress: <empty> // Iface Netdev: <empty> // SID: 16 // iSCSI Connection State: LOGGED IN // iSCSI Session State: LOGGED_IN // Internal iscsid Session State: NO CHANGE public class IScsiHostParser { private static final Pattern HOST_PATTERN = Pattern.compile("Host Number:\\s*(\\d+)"); private static final String HOST_NUMBER = "Host Number"; private static final String STATE = "State"; private static final String TRANSPORT = "Transport"; private static final String INITIATOR_NAME = "Initiatorname"; private static final String IP_ADDRESS = "IPaddress"; private static final String HW_ADDRESS = "HWaddress"; private static final String NETDEV = "Netdev"; private TextParser parser; private IScsiSessionParser sessionParser; public IScsiHostParser() { parser = new TextParser(); parser.setRepeatPattern(HOST_PATTERN); sessionParser = new IScsiSessionParser(); } public List<IScsiHost> parseHosts(String text) { List<IScsiHost> hosts = Lists.newArrayList(); for (String textBlock : parser.parseTextBlocks(text)) { IScsiHost host = parseHost(textBlock); if (host != null) { hosts.add(host); } } return hosts; } public IScsiHost parseHost(String text) { if (StringUtils.isBlank(text)) { return null; } Map<String, String> properties = parser.parseProperties(text, ':'); IScsiHost host = new IScsiHost(); host.setHostId(NumberUtils.toInt(properties.get(HOST_NUMBER))); host.setState(properties.get(STATE)); host.setTransport(properties.get(TRANSPORT)); host.setInitiatorName(properties.get(INITIATOR_NAME)); host.setIpAddress(properties.get(IP_ADDRESS)); host.setHwAddress(properties.get(HW_ADDRESS)); host.setNetdev(properties.get(NETDEV)); host.setSessions(sessionParser.parseSessions(text)); return host; } }