astah*でPing監視またはチェックするプラグインをお試し開発
マインドマップを使用してPing監視またはチェックするプラグインをお試し開発。
インベントリやチェックに使えるのではと。
仕組み
- IPアドレスが記載されているブランチを探索
- IPアドレスにPing(といってもJavaのisReachable)実施
- 結果でブランチ文字色変更
コード
TemplateActionにそのままコーディング。
package jp.co.exmaple.astah.example; import java.net.InetAddress; import java.util.Arrays; import java.util.List; import javax.swing.JOptionPane; import com.change_vision.jude.api.inf.AstahAPI; import com.change_vision.jude.api.inf.editor.ITransactionManager; import com.change_vision.jude.api.inf.exception.InvalidEditingException; import com.change_vision.jude.api.inf.exception.ProjectNotFoundException; import com.change_vision.jude.api.inf.model.IDiagram; import com.change_vision.jude.api.inf.model.IMindMapDiagram; import com.change_vision.jude.api.inf.model.IModel; import com.change_vision.jude.api.inf.presentation.INodePresentation; import com.change_vision.jude.api.inf.presentation.PresentationPropertyConstants.Key; import com.change_vision.jude.api.inf.project.ProjectAccessor; import com.change_vision.jude.api.inf.ui.IPluginActionDelegate; import com.change_vision.jude.api.inf.ui.IWindow; import com.change_vision.jude.api.inf.view.IDiagramViewManager; public class TemplateAction implements IPluginActionDelegate { private IModel project = null; public Object run(IWindow window) throws UnExpectedException { try { AstahAPI api = AstahAPI.getAstahAPI(); ProjectAccessor projectAccessor = api.getProjectAccessor(); project = projectAccessor.getProject(); IDiagramViewManager diagramViewManager = api.getViewManager().getDiagramViewManager(); IDiagram currentDiagram = diagramViewManager.getCurrentDiagram(); if((currentDiagram instanceof IMindMapDiagram) == true) { executePing(((IMindMapDiagram)currentDiagram).getRoot(), projectAccessor); Arrays.asList(((IMindMapDiagram)currentDiagram).getFloatingTopics()).forEach(inp -> { executePing(inp, projectAccessor); }); } } catch(ProjectNotFoundException e) { String message = "Project is not opened.Please open the project or create new project."; JOptionPane.showMessageDialog(window.getParent(), message, "Warning", JOptionPane.WARNING_MESSAGE); } catch(Exception e) { JOptionPane.showMessageDialog(window.getParent(), "Unexpected error has occurred.", "Alert", JOptionPane.ERROR_MESSAGE); throw new UnExpectedException(); } return null; } private void executePing(INodePresentation iNodePresentation, ProjectAccessor projectAccessor) { List<INodePresentation> iNodePresentationList = Arrays.asList(iNodePresentation.getChildren()); iNodePresentationList.forEach(inp -> { this.judgePing(inp, projectAccessor); }); } private void changeFontColor(INodePresentation inp, String color) { try { inp.setProperty(Key.FONT_COLOR, color); } catch (InvalidEditingException e) { } } private void judgePing(INodePresentation inp, ProjectAccessor projectAccessor) { ITransactionManager transactionManager = projectAccessor.getTransactionManager(); transactionManager.beginTransaction(); InetAddress inetAddress = null; try { System.out.println(inp.getLabel()); inetAddress = InetAddress.getByName(inp.getLabel()); } catch(Exception e) { System.out.println("InetAddress Exception"); System.out.println(inetAddress); } try { if(inetAddress != null) { if(inetAddress.isReachable(1000) == true) { changeFontColor(inp, "#00FF00"); System.out.println(inetAddress.toString() + "ping ok"); } else { changeFontColor(inp, "#FF0000"); System.out.println(inetAddress.toString() + "ping ng"); } } } catch(Exception e) { changeFontColor(inp, "#FF0000"); System.out.println(inetAddress.toString() + "ping ng"); } transactionManager.endTransaction(); List<INodePresentation> iNodePresentationList = Arrays.asList(inp.getChildren()); iNodePresentationList.forEach(inpchild -> { this.judgePing(inpchild, projectAccessor); }); } }