/* * 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 com.google.common.collect.Lists; import com.iwave.ext.linux.model.IScsiTarget; import com.iwave.ext.linux.model.IScsiSession; import com.iwave.ext.text.TextParser; //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 IScsiSessionParser { private static final Pattern TARGET_PATTERN = Pattern.compile("Target:\\s*(.*)"); private static final String TARGET = "Target"; private static final String CURRENT_PORTAL = "Current Portal"; private static final String PERSISTENT_PORTAL = "Persistent Portal"; private static final String IFACE_NAME = "Iface Name"; private static final String IFACE_TRANSPORT = "Iface Transport"; private static final String IFACE_INITIATOR_NAME = "Iface Initiatorname"; private static final String IFACE_IP_ADDRESS = "Iface IPaddress"; private static final String IFACE_HW_ADDRESS = "Iface HWaddress"; private static final String IFACE_NETDEV = "Iface Netdev"; private static final String SESSION_ID = "SID"; private static final String CONNECTION_STATE = "iSCSI Connection State"; private static final String SESSION_STATE = "iSCSI Session State"; private TextParser parser; public IScsiSessionParser() { parser = new TextParser(); parser.setRepeatPattern(TARGET_PATTERN); } public List<IScsiSession> parseSessions(String text) { List<IScsiSession> sessions = Lists.newArrayList(); for (String textBlock : parser.parseTextBlocks(text)) { IScsiSession session = parseSession(textBlock); if (session != null) { sessions.add(session); } } return sessions; } public IScsiSession parseSession(String text) { if (StringUtils.isBlank(text)) { return null; } Map<String, String> properties = parser.parseProperties(text, ':'); IScsiSession session = new IScsiSession(); IScsiTarget target = new IScsiTarget(); String targetValue = null; if (properties.get(TARGET) != null && properties.get(TARGET).contains(" ")) { targetValue = StringUtils.substring(properties.get(TARGET), 0, properties.get(TARGET).indexOf(" ")); } else { targetValue = properties.get(TARGET); } target.setIqn(targetValue); target.setPortal(properties.get(CURRENT_PORTAL)); target.setIfaceName(properties.get(IFACE_NAME)); session.setTarget(target); session.setPersistentPortal(properties.get(PERSISTENT_PORTAL)); session.setIfaceTransport(properties.get(IFACE_TRANSPORT)); session.setIfaceInitiatorName(properties.get(IFACE_INITIATOR_NAME)); session.setIfaceIPAddress(properties.get(IFACE_IP_ADDRESS)); session.setIfaceHWAddress(properties.get(IFACE_HW_ADDRESS)); session.setIfaceNetdev(properties.get(IFACE_NETDEV)); session.setSessionID(properties.get(SESSION_ID)); session.setConnectionState(properties.get(CONNECTION_STATE)); session.setSessionState(properties.get(SESSION_STATE)); return session; } }