package net.sf.gazpachoquest.dbpopulator.samples;
import net.sf.gazpachoquest.dto.QuestionDTO;
import net.sf.gazpachoquest.dto.QuestionOptionDTO;
import net.sf.gazpachoquest.dto.QuestionnaireDefinitionDTO;
import net.sf.gazpachoquest.dto.SectionDTO;
import net.sf.gazpachoquest.facades.QuestionnaireDefinitionEditorFacade;
import net.sf.gazpachoquest.types.Language;
import net.sf.gazpachoquest.types.QuestionType;
import net.sf.gazpachoquest.types.RenderingMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class JavaPerformanceSurveyCreator {
@Autowired
private QuestionnaireDefinitionEditorFacade questionnaireDefinitionEditorFacade;
public QuestionnaireDefinitionDTO create() {
QuestionnaireDefinitionDTO questionnaireDefinition = QuestionnaireDefinitionDTO
.with()
.language(Language.EN)
.questionnairLanguageSettingsStart()
.title("Java Performance Tunning Survey")
.description("Gathering insight into Java performance world to improve our product offering.")
.welcomeText(
"<p>Each respondent will receive a subscription to use our performance monitoring solution and"
+ " participates in a draw of 10 Amazon gift certificates worth $100 each. To top it off, "
+ "we will also share the results of the survey with you.</p>"
+ "<p>Answering to the 10 questions will take less than 3 minutes of your time.</p>")
.questionnairLanguageSettingsEnd().sectionInfoVisible(true).welcomeVisible(true)
.renderingMode(RenderingMode.SECTION_BY_SECTION).build();
// Section 1
SectionDTO section = SectionDTO.with().language(Language.EN).pageLanguageSettingsStart()
.title("Welcome to the survey").pageLanguageSettingsEnd().randomizationEnabled(false).build();
questionnaireDefinition.addSection(section);
questionnaireDefinition = questionnaireDefinitionEditorFacade.save(questionnaireDefinition);
section = questionnaireDefinition.getLastSectionDTO();
QuestionDTO question = QuestionDTO.with().type(QuestionType.L).language(Language.EN).code("Q1")
.languageSettingsStart()
.title("Have you faced any Java performance issues during the past 12 months? ").languageSettingsEnd()
.required(true).build();
question.addQuestionOption(QuestionOptionDTO.with().code("yes").language(Language.EN).title("Yes").build());
question.addQuestionOption(QuestionOptionDTO.with().code("no").language(Language.EN).title("No").build());
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
// Section 2
section = SectionDTO
.with()
.language(Language.EN)
.randomizationEnabled(false)
.pageLanguageSettingsStart()
.title("In case you faced several performance issues during the past year, "
+ "describe just one while answering the following questions.").pageLanguageSettingsEnd()
.relevance("${q1=='yes'}").build();
questionnaireDefinition.addSection(section);
questionnaireDefinition = questionnaireDefinitionEditorFacade.save(questionnaireDefinition);
// Section 3
section = SectionDTO.with().language(Language.EN).pageLanguageSettingsStart()
.title("Tell us more about your performance issues").pageLanguageSettingsEnd()
.relevance("${q1=='yes'}").randomizationEnabled(false).build();
questionnaireDefinition.addSection(section);
questionnaireDefinition = questionnaireDefinitionEditorFacade.save(questionnaireDefinition);
section = questionnaireDefinition.getLastSectionDTO();
question = QuestionDTO.with().type(QuestionType.M).code("Q2").language(Language.EN).languageSettingsStart()
.title("What were the symptoms surfacing the performance issue?").languageSettingsEnd()
.otherAllowed(true).build();
question.addQuestionOption(QuestionOptionDTO.with().code("O1").language(Language.EN)
.title("Excessive usage of resources (such as CPU, memory, disk, network, etc)").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O2").language(Language.EN)
.title("Slow user transactions").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O3").language(Language.EN)
.title("Failing user transactions").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O4").language(Language.EN)
.title("Complete service outage").build());
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
question = QuestionDTO.with().type(QuestionType.M).code("Q3").language(Language.EN).languageSettingsStart()
.title("How did you find out that your Java application is facing the issue?").languageSettingsEnd()
.otherAllowed(true).build();
question.addQuestionOption(QuestionOptionDTO.with().code("O1").language(Language.EN)
.title("Support calls / e-mails").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O2").language(Language.EN)
.title("Load / stress tests").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O3").language(Language.EN)
.title("Monitoring software").build());
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
question = QuestionDTO.with().type(QuestionType.L).language(Language.EN).code("Q4").languageSettingsStart()
.title("Was the performance issue affecting end users? ").languageSettingsEnd().build();
question.addQuestionOption(QuestionOptionDTO.with().code("O1").language(Language.EN).title("Yes").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O2").language(Language.EN).title("No").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O3").language(Language.EN).title("Don't know")
.build());
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
question = QuestionDTO.with().type(QuestionType.M).code("Q5").language(Language.EN).languageSettingsStart()
.title("Which monitoring software were you using to monitor Java application in production?")
.languageSettingsEnd().otherAllowed(true).build();
question.addQuestionOption(QuestionOptionDTO.with().code("O1").language(Language.EN).title("None").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O2").language(Language.EN).title("AppDynamics")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O3").language(Language.EN).title("AppNeta").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O4").language(Language.EN).title("BMC Software APM")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O5").language(Language.EN).title("CA APM").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O6").language(Language.EN).title("Compuware APM")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O7").language(Language.EN).title("DataDog").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O8").language(Language.EN).title("Nagios").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O9").language(Language.EN).title("NewRelic").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O10").language(Language.EN).title("Opsview").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O11").language(Language.EN)
.title("Oracle Enterprise Manager").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O12").language(Language.EN).title("Pingdom").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O13").language(Language.EN).title("Plumbr").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O14").language(Language.EN).title("Zabbix").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O15").language(Language.EN).title("Don't know")
.build());
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
question = QuestionDTO
.with()
.type(QuestionType.M)
.code("Q6")
.language(Language.EN)
.languageSettingsStart()
.title("After understanding that your Java application has a performance issue, what tools / sources did you use to locate the root cause?")
.languageSettingsEnd().otherAllowed(true).build();
question.addQuestionOption(QuestionOptionDTO.with().code("O1").language(Language.EN)
.title("Application Performance Management (APM) tools").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O2").language(Language.EN).title("Application Logs")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O3").language(Language.EN).title("Database Logs")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O4").language(Language.EN).title("Debuggers").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O5").language(Language.EN)
.title("Garbage Collection Logs").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O6").language(Language.EN)
.title("JVM built-in tooling (jconsole, jmc, jstat, jmap, etc)").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O7").language(Language.EN)
.title("Memory Dump Analyzer").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O8").language(Language.EN)
.title("OS command-line tooling (top, free, sar, etc)").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O9").language(Language.EN).title("Profilers").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O10").language(Language.EN)
.title("Thread Dump Analyzer").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O11").language(Language.EN)
.title("I asked for external help").build());
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
question = QuestionDTO.with().type(QuestionType.L).language(Language.EN).code("Q7").languageSettingsStart()
.title("Were you able to reproduce the performance issue in the test/development environment?")
.languageSettingsEnd().build();
question.addQuestionOption(QuestionOptionDTO.with().code("O1").language(Language.EN).title("Yes").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O2").language(Language.EN).title("No").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O3").language(Language.EN).title("Did not need to")
.build());
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
question = QuestionDTO.with().type(QuestionType.M).code("Q8").language(Language.EN).languageSettingsStart()
.title("What was the root cause for the performance issue?").languageSettingsEnd().otherAllowed(true)
.build();
question.addQuestionOption(QuestionOptionDTO.with().code("O1").language(Language.EN)
.title("Inefficient/missing Caching").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O2").language(Language.EN)
.title("Insufficient/missing Database Connection Pooling").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O3").language(Language.EN)
.title("Slow Database Queries").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O4").language(Language.EN)
.title("Too many Database Queries").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O5").language(Language.EN).title("Excessive Disk IO")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O6").language(Language.EN)
.title("Inefficient Garbage Collection").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O7").language(Language.EN)
.title("HTTP Session Bloat").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O8").language(Language.EN).title("Memory Leak")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O9").language(Language.EN)
.title("Monolithic/Not Scalable Architecture").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O10").language(Language.EN)
.title("Excessive Network IO").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O11").language(Language.EN)
.title("Poor Transaction Configuration").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O12").language(Language.EN)
.title("Synchronization Issues (Locks/Deadlocks)").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O13").language(Language.EN)
.title("Insufficient/missing Thread Pooling").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O14").language(Language.EN)
.title("I Do Not Have A Clue").build());
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
question = QuestionDTO.with().type(QuestionType.L).language(Language.EN).code("Q9").languageSettingsStart()
.title("How long did it take you to detect and fix the root cause of the performance issue ? ")
.languageSettingsEnd().build();
question.addQuestionOption(QuestionOptionDTO.with().code("O1").language(Language.EN).title("Less than an hour")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O2").language(Language.EN).title("Less than a day")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O3").language(Language.EN).title("Less than a week")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O4").language(Language.EN).title("Less than a month")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O5").language(Language.EN).title("More than a month")
.build());
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
// 4 Comment/Essay Box
question = QuestionDTO.with().type(QuestionType.T).language(Language.EN).code("Q10").languageSettingsStart()
.title("What was the most time consuming part of the process? ").languageSettingsEnd().build();
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
section = SectionDTO
.with()
.language(Language.EN)
.randomizationEnabled(false)
.pageLanguageSettingsStart()
.title("As you do not seem to have faced any performance issues with Java applications, the rest of the survey questions were not applicable."
+ " But we are still happy to offer you the possibility to get access to 3-months license and participate in Amazon gift card raffle.")
.pageLanguageSettingsEnd().relevance("${q1=='no'}").build();
questionnaireDefinition.addSection(section);
questionnaireDefinition = questionnaireDefinitionEditorFacade.save(questionnaireDefinition);
section = SectionDTO
.with()
.language(Language.EN)
.randomizationEnabled(false)
.pageLanguageSettingsStart()
.title("To finish the survey and submit results, please complete all fields below:")
.description(
"This data will be used to contact the winners of the Amazon gift card raffle, hand out free licenses and publish the survey results.")
.pageLanguageSettingsEnd().build();
questionnaireDefinition.addSection(section);
questionnaireDefinition = questionnaireDefinitionEditorFacade.save(questionnaireDefinition);
section = questionnaireDefinition.getLastSectionDTO();
question = QuestionDTO.with().type(QuestionType.S).language(Language.EN).code("Q11").languageSettingsStart()
.title("Name").languageSettingsEnd().required(true).build();
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
question = QuestionDTO.with().type(QuestionType.S).language(Language.EN).code("Q12").languageSettingsStart()
.title("Company").languageSettingsEnd().required(true).build();
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
question = QuestionDTO.with().type(QuestionType.L).language(Language.EN).code("Q13").otherAllowed(true)
.languageSettingsStart().title("Role").languageSettingsEnd().build();
question.addQuestionOption(QuestionOptionDTO.with().code("O1").language(Language.EN).title("Java developer")
.build());
question.addQuestionOption(QuestionOptionDTO.with().code("O2").language(Language.EN)
.title("System administrator").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O4").language(Language.EN)
.title("Application administrator").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O5").language(Language.EN)
.title("Operations manager").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O6").language(Language.EN)
.title("Development manager").build());
question.addQuestionOption(QuestionOptionDTO.with().code("O7").language(Language.EN).title("Executive").build());
section.addQuestion(question);
section = questionnaireDefinitionEditorFacade.save(section);
return questionnaireDefinition;
}
}