/** * {@inheritDoc} */ @Override public Multimap<String, Tag> mapTags(TagState state) { Multimap<String, Tag> tags = ArrayListMultimap.create(); for (Map.Entry<String, RuleOutput> entry : allOutputs.entries()) { if (entry.getValue().hasResultTags()) { for (Tag tag : entry.getValue().getTags()) { if (tag.getState().equals(state)) { tags.put(tag.getType(), tag); } } } } return tags; }
/** * Returns the InvocationSequenceData of ProblemContext Tag. * * @param leafTag * leafTag for which the InvocationSequenceData should be returned * @return InvocationSequenceData of ProblemContext */ private Optional<CauseCluster> getProblemContext(Tag leafTag) { while (null != leafTag) { if (leafTag.getType().equals(RuleConstants.DIAGNOSIS_TAG_PROBLEM_CONTEXT)) { if (leafTag.getValue() instanceof CauseCluster) { return Optional.of((CauseCluster) leafTag.getValue()); } else { throw new RuntimeException("Problem context has wrong datatype!"); } } leafTag = leafTag.getParent(); } return Optional.empty(); }
/** * Returns the AggregatedInvocationSequenceData of RootCauseInvocations Tag. * * @param leafTag * leafTag for which the AggregatedInvocationSequenceData should be returned * @return AggregatedInvocationSequenceData of RootCauseInvocations */ private Optional<AggregatedDiagnosisData> getRootCauseInvocations(Tag leafTag) { while (null != leafTag) { if (leafTag.getType().equals(RuleConstants.DIAGNOSIS_TAG_PROBLEM_CAUSE)) { if (leafTag.getValue() instanceof AggregatedDiagnosisData) { return Optional.of((AggregatedDiagnosisData) leafTag.getValue()); } else { throw new RuntimeException("Problem cause has wrong datatype!"); } } leafTag = leafTag.getParent(); } return Optional.empty(); }
/** * Returns the InvocationSequenceData of GlobalContext Tag. * * @param leafTag * leafTag for which the InvocationSequenceData should be returned * @return InvocationSequenceData of GlobalContext */ private Optional<InvocationSequenceData> getGlobalContext(Tag leafTag) { while (null != leafTag) { if (leafTag.getType().equals(RuleConstants.DIAGNOSIS_TAG_GLOBAL_CONTEXT)) { if (leafTag.getValue() instanceof InvocationSequenceData) { return Optional.of((InvocationSequenceData) leafTag.getValue()); } else { throw new RuntimeException("Global context has wrong datatype!"); } } leafTag = leafTag.getParent(); } return Optional.empty(); }
/** * Returns the CauseStructure of the CauseStructure Tag. * * @param leafTag * leafTag for which the CauseStructure should be returned * @return CauseStructure of leafTag */ private Optional<CauseStructure> getCauseStructure(Tag leafTag) { while (null != leafTag) { if (leafTag.getType().equals(RuleConstants.DIAGNOSIS_TAG_CAUSE_STRUCTURE)) { if (leafTag.getValue() instanceof CauseStructure) { return Optional.of((CauseStructure) leafTag.getValue()); } else { throw new RuntimeException("Cause structure has wrong datatype!"); } } leafTag = leafTag.getParent(); } return Optional.empty(); } }
@Test public void validRootTagInput() { rocks.inspectit.server.diagnosis.engine.tag.Tag tag = rocks.inspectit.server.diagnosis.engine.tag.Tags.rootTag("TestInput"); assertThat(tag.getType(), equalTo(rocks.inspectit.server.diagnosis.engine.tag.Tags.ROOT_TAG)); assertThat(tag.getValue().toString(), equalTo("TestInput")); assertThat(tag.getParent(), equalTo(null)); assertThat(tag.getState(), equalTo(TagState.LEAF)); }
@Test public void nullParentTag() { rocks.inspectit.server.diagnosis.engine.tag.Tag tag = rocks.inspectit.server.diagnosis.engine.tag.Tags.tag("A", "TestInput"); assertThat(tag.getType(), equalTo("A")); assertThat(tag.getValue().toString(), equalTo("TestInput")); assertThat(tag.getParent(), equalTo(null)); assertThat(tag.getState(), equalTo(TagState.LEAF)); }
@Test public void nullParentTag() { Collection<rocks.inspectit.server.diagnosis.engine.tag.Tag> tags = rocks.inspectit.server.diagnosis.engine.tag.Tags.tags("A", null, "TestInput1", "TestInput2"); rocks.inspectit.server.diagnosis.engine.tag.Tag[] tagArray = tags.toArray(new rocks.inspectit.server.diagnosis.engine.tag.Tag[0]); assertThat(tags, hasSize(2)); assertThat(tagArray[0].getType(), equalTo("A")); assertThat(tagArray[1].getType(), equalTo("A")); assertThat(tagArray[0].getValue().toString(), equalTo("TestInput1")); assertThat(tagArray[1].getValue().toString(), equalTo("TestInput2")); assertThat(tagArray[0].getParent(), equalTo(null)); assertThat(tagArray[1].getParent(), equalTo(null)); assertThat(tagArray[0].getState(), equalTo(TagState.LEAF)); assertThat(tagArray[1].getState(), equalTo(TagState.LEAF)); }
@Test public void nullRootTagInput() { rocks.inspectit.server.diagnosis.engine.tag.Tag tag = rocks.inspectit.server.diagnosis.engine.tag.Tags.rootTag(null); assertThat(tag.getType(), equalTo(rocks.inspectit.server.diagnosis.engine.tag.Tags.ROOT_TAG)); assertThat(tag.getValue(), equalTo(null)); assertThat(tag.getParent(), equalTo(null)); assertThat(tag.getState(), equalTo(TagState.LEAF)); } }
@Test public void withParentTag() { rocks.inspectit.server.diagnosis.engine.tag.Tag tagA = rocks.inspectit.server.diagnosis.engine.tag.Tags.tag("A", "TestInput"); assertThat(tagA.getState(), equalTo(TagState.LEAF)); rocks.inspectit.server.diagnosis.engine.tag.Tag tagB = rocks.inspectit.server.diagnosis.engine.tag.Tags.tag("B", "TestInput", tagA); assertThat(tagB.getType(), equalTo("B")); assertThat(tagB.getValue().toString(), equalTo("TestInput")); assertThat(tagB.getParent(), equalTo(tagA)); assertThat(tagB.getState(), equalTo(TagState.LEAF)); assertThat(tagA.getState(), equalTo(TagState.PARENT)); } }
@Test public void withParentTag() { rocks.inspectit.server.diagnosis.engine.tag.Tag tagA = rocks.inspectit.server.diagnosis.engine.tag.Tags.tag("A", "TestInput"); Collection<rocks.inspectit.server.diagnosis.engine.tag.Tag> tags = rocks.inspectit.server.diagnosis.engine.tag.Tags.tags("B", tagA, "TestInput1", "TestInput2"); rocks.inspectit.server.diagnosis.engine.tag.Tag[] tagArray = tags.toArray(new rocks.inspectit.server.diagnosis.engine.tag.Tag[0]); assertThat(tags, hasSize(2)); assertThat(tagArray[0].getType(), equalTo("B")); assertThat(tagArray[1].getType(), equalTo("B")); assertThat(tagArray[0].getValue().toString(), equalTo("TestInput1")); assertThat(tagArray[1].getValue().toString(), equalTo("TestInput2")); assertThat(tagArray[0].getParent(), equalTo(tagA)); assertThat(tagArray[1].getParent(), equalTo(tagA)); assertThat(tagArray[0].getState(), equalTo(TagState.LEAF)); assertThat(tagArray[1].getState(), equalTo(TagState.LEAF)); assertThat(tagA.getState(), equalTo(TagState.PARENT)); } }
/** * {@inheritDoc} * * @throws RuleExecutionException * If tag injection fails. */ @Override public Object determineValueToInject(ExecutionContext context) throws RuleExecutionException { // extract the required type form the unraveled list of input Tags for (Tag tag : context.getRuleInput().getUnraveled()) { if (tag.getType().equals(getType())) { return InjectionStrategy.BY_VALUE.equals(getInjectionStrategy()) ? tag.getValue() : tag; } } throw new RuleExecutionException("Unable to find Tag: " + getType() + " in RuleInput.", context); }