Rat (Release Audit Tool) resultsThe following document contains the results of Rat (Release Audit Tool).
*****************************************************
Summary
-------
Generated at: 2019-04-12T14:17:33-04:00
Notes: 2
Binaries: 2
Archives: 0
Standards: 642
Apache Licensed: 12
Generated Documents: 0
JavaDocs are generated, thus a license header is optional.
Generated files do not require license headers.
630 Unknown Licenses
*****************************************************
Files with unapproved licenses:
MAINTAINERS
README.md
site-content/pom.xml
site-content/pmd.xml
site-content/MAINTAINERS
site-content/README.md
site-content/travis-utilities/release.sh
site-content/travis-utilities/deploy-snapshot.sh
site-content/travis-utilities/.travis.settings.xml
site-content/checkstyle.xml
site-content/create_collector.md
site-content/.travis.yml
site-content/src/test/resources/artifacts/artifacts.json
site-content/src/test/resources/collectors/coll.json
site-content/src/test/resources/component/component.json
site-content/src/test/resources/builds/builds.json
site-content/src/test/resources/librarypolicy/librarypolicy.json
site-content/src/test/resources/dashboard/dashboard.json
site-content/src/test/resources/codequality/codequality.json
site-content/src/test/resources/test_results/test_results.json
site-content/src/test/resources/collector_items/items.json
site-content/src/test/resources/securityscan/securityscan.json
site-content/src/test/java/com/capitalone/dashboard/repository/FongoBaseRepositoryTest.java
site-content/src/test/java/com/capitalone/dashboard/repository/CollectorTaskTests.java
site-content/src/test/java/com/capitalone/dashboard/repository/CollectorItemRepositoryTest.java
site-content/src/test/java/com/capitalone/dashboard/repository/FongoConfig.java
site-content/src/test/java/com/capitalone/dashboard/repository/TemplateRepositoryTest.java
site-content/src/test/java/com/capitalone/dashboard/repository/AuthenticationRepositoryTest.java
site-content/src/test/java/com/capitalone/dashboard/repository/FeatureRepositoryTest.java
site-content/src/test/java/com/capitalone/dashboard/repository/ScopeOwnerRepositoryTest.java
site-content/src/test/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepositoryTest.java
site-content/src/test/java/com/capitalone/dashboard/repository/DashboardCreateTests.java
site-content/src/test/java/com/capitalone/dashboard/repository/TeamRepositoryTest.java
site-content/src/test/java/com/capitalone/dashboard/repository/ScopeRepositoryTest.java
site-content/src/test/java/com/capitalone/dashboard/util/HygieiaUtilsTest.java
site-content/src/test/java/com/capitalone/dashboard/util/TestUtils.java
site-content/src/test/java/com/capitalone/dashboard/util/EncryptionTests.java
site-content/src/test/java/com/capitalone/dashboard/util/PipelineUtilsTest.java
site-content/src/test/java/com/capitalone/dashboard/util/DashboardUtilsTest.java
site-content/src/test/java/com/capitalone/dashboard/util/LoadTestData.java
site-content/src/test/java/com/capitalone/dashboard/util/GitBranchSpecTest.java
site-content/src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskTwoWithGenericItem.java
site-content/src/test/java/com/capitalone/dashboard/collector/CollectorTaskTest.java
site-content/src/test/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItemTest.java
site-content/src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskWithGenericItem.java
site-content/src/test/java/com/capitalone/dashboard/model/DashboardTest.java
site-content/src/test/java/com/capitalone/dashboard/model/LibraryPolicyResultTest.java
site-content/src/test/java/com/capitalone/dashboard/model/StandardWidgetTest.java
site-content/src/test/java/com/capitalone/dashboard/model/ComponentTest.java
site-content/src/test/java/com/capitalone/dashboard/event/EnvironmentComponentEventListenerTest.java
site-content/src/test/java/com/capitalone/dashboard/event/TestResultEventListenerTest.java
site-content/src/test/java/com/capitalone/dashboard/event/CommitEventListenerTest.java
site-content/src/test/java/com/capitalone/dashboard/event/BuildEventListenerTest.java
site-content/src/test/java/com/capitalone/dashboard/event/sync/SyncDashboardTest.java
site-content/src/test/java/com/capitalone/dashboard/MarkdownTest.java
site-content/src/main/resources/logback.xml
site-content/src/main/java/com/capitalone/dashboard/misc/HygieiaException.java
site-content/src/main/java/com/capitalone/dashboard/repository/AuditResultRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CollectorItemRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/ChangeOrderRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/RequestLogRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryCustom.java
site-content/src/main/java/com/capitalone/dashboard/repository/EnvironmentComponentRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/GitHubRepoRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/AuthenticationRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/GenericCollectorItemRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/RallyBurnDownRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CloudVolumeRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/BuildRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/ApiTokenRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQuery.java
site-content/src/main/java/com/capitalone/dashboard/repository/CloudInstanceHistoryRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/FortifyScanRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/IncidentRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/JobRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/LibraryPolicyResultsRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryImpl.java
site-content/src/main/java/com/capitalone/dashboard/repository/ServiceAccountRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/ScopeRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/ScoreCriteriaSettingsRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CloudSubNetworkRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CollItemConfigHistoryRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/BaseCollectorItemRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/TeamRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CodeQualityRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryImpl.java
site-content/src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryCustom.java
site-content/src/main/java/com/capitalone/dashboard/repository/DashboardRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/TemplateRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/ScoreRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CloudInstanceRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CmdbRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CloudVirtualNetworkRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/ScoreCollectorItemRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/UserInfoRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/ScopeOwnerRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/ComponentRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/Monitor2Repository.java
site-content/src/main/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/PipelineRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/ConfigurationRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/RallyFeatureRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CommitRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CodeReposBuildsRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/MaturityModelRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/RepositoryPackage.java
site-content/src/main/java/com/capitalone/dashboard/repository/EnvironmentStatusRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/TeamInventoryRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/PerformanceRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CollectorRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/ServiceRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/GitRequestRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/BaseCollectorRepository.java
site-content/src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQueryImpl.java
site-content/src/main/java/com/capitalone/dashboard/repository/TestResultRepository.java
site-content/src/main/java/com/capitalone/dashboard/response/BuildDataCreateResponse.java
site-content/src/main/java/com/capitalone/dashboard/response/CloudVolumeAggregatedResponse.java
site-content/src/main/java/com/capitalone/dashboard/response/CloudVirtualNetworkAggregatedResponse.java
site-content/src/main/java/com/capitalone/dashboard/response/RallyBurnDownResponse.java
site-content/src/main/java/com/capitalone/dashboard/response/CloudSubNetworkAggregatedResponse.java
site-content/src/main/java/com/capitalone/dashboard/util/PipelineUtils.java
site-content/src/main/java/com/capitalone/dashboard/util/EncryptionException.java
site-content/src/main/java/com/capitalone/dashboard/util/FeatureCollectorConstants.java
site-content/src/main/java/com/capitalone/dashboard/util/CoreFeatureSettings.java
site-content/src/main/java/com/capitalone/dashboard/util/Supplier.java
site-content/src/main/java/com/capitalone/dashboard/util/HygieiaUtils.java
site-content/src/main/java/com/capitalone/dashboard/util/SuperFeatureComparator.java
site-content/src/main/java/com/capitalone/dashboard/util/Encryption.java
site-content/src/main/java/com/capitalone/dashboard/util/DashboardUtils.java
site-content/src/main/java/com/capitalone/dashboard/util/GitHubParsedUrl.java
site-content/src/main/java/com/capitalone/dashboard/util/GitBranchSpec.java
site-content/src/main/java/com/capitalone/dashboard/util/UnsafeDeleteException.java
site-content/src/main/java/com/capitalone/dashboard/config/CollectorConfig.java
site-content/src/main/java/com/capitalone/dashboard/config/collector/CloudConfig.java
site-content/src/main/java/com/capitalone/dashboard/config/MongoConfig.java
site-content/src/main/java/com/capitalone/dashboard/collector/CollectorTask.java
site-content/src/main/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItem.java
site-content/src/main/java/com/capitalone/dashboard/collector/RestOperationsSupplier.java
site-content/src/main/java/com/capitalone/dashboard/status/LibraryPolicyAuditStatus.java
site-content/src/main/java/com/capitalone/dashboard/status/CodeReviewAuditStatus.java
site-content/src/main/java/com/capitalone/dashboard/status/CodeQualityAuditStatus.java
site-content/src/main/java/com/capitalone/dashboard/status/ArtifactAuditStatus.java
site-content/src/main/java/com/capitalone/dashboard/status/TestResultAuditStatus.java
site-content/src/main/java/com/capitalone/dashboard/status/PerformanceTestAuditStatus.java
site-content/src/main/java/com/capitalone/dashboard/status/BuildAuditStatus.java
site-content/src/main/java/com/capitalone/dashboard/status/DashboardAuditStatus.java
site-content/src/main/java/com/capitalone/dashboard/model/JobCollectorItem.java
site-content/src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubRepo.java
site-content/src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubParsed.java
site-content/src/main/java/com/capitalone/dashboard/model/webhook/github/MergeEvent.java
site-content/src/main/java/com/capitalone/dashboard/model/RallyFeatureType.java
site-content/src/main/java/com/capitalone/dashboard/model/BaseModel.java
site-content/src/main/java/com/capitalone/dashboard/model/Build.java
site-content/src/main/java/com/capitalone/dashboard/model/TestCaseStep.java
site-content/src/main/java/com/capitalone/dashboard/model/GitRequest.java
site-content/src/main/java/com/capitalone/dashboard/model/DashboardType.java
site-content/src/main/java/com/capitalone/dashboard/model/Pipeline.java
site-content/src/main/java/com/capitalone/dashboard/model/GenericCollectorItem.java
site-content/src/main/java/com/capitalone/dashboard/model/UserRole.java
site-content/src/main/java/com/capitalone/dashboard/model/Stage.java
site-content/src/main/java/com/capitalone/dashboard/model/Team.java
site-content/src/main/java/com/capitalone/dashboard/model/TestCaseStatus.java
site-content/src/main/java/com/capitalone/dashboard/model/relation/RelatedCollectorItem.java
site-content/src/main/java/com/capitalone/dashboard/model/ChangeOrder.java
site-content/src/main/java/com/capitalone/dashboard/model/FeatureIssueLink.java
site-content/src/main/java/com/capitalone/dashboard/model/PipelineStageType.java
site-content/src/main/java/com/capitalone/dashboard/model/TestCaseConditionResult.java
site-content/src/main/java/com/capitalone/dashboard/model/Review.java
site-content/src/main/java/com/capitalone/dashboard/model/Application.java
site-content/src/main/java/com/capitalone/dashboard/model/ScopeOwner.java
site-content/src/main/java/com/capitalone/dashboard/model/PerformanceMetric.java
site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatLevel.java
site-content/src/main/java/com/capitalone/dashboard/model/CodeReposBuilds.java
site-content/src/main/java/com/capitalone/dashboard/model/RepoBranch.java
site-content/src/main/java/com/capitalone/dashboard/model/quality/FindBugsXmlReport.java
site-content/src/main/java/com/capitalone/dashboard/model/quality/PmdReport.java
site-content/src/main/java/com/capitalone/dashboard/model/quality/JacocoXmlReport.java
site-content/src/main/java/com/capitalone/dashboard/model/quality/ArtifactType.java
site-content/src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitor.java
site-content/src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitee.java
site-content/src/main/java/com/capitalone/dashboard/model/quality/JunitXmlReport.java
site-content/src/main/java/com/capitalone/dashboard/model/quality/CheckstyleReport.java
site-content/src/main/java/com/capitalone/dashboard/model/UserStory.java
site-content/src/main/java/com/capitalone/dashboard/model/StandardWidget.java
site-content/src/main/java/com/capitalone/dashboard/model/BuildStatus.java
site-content/src/main/java/com/capitalone/dashboard/model/CloudVirtualNetwork.java
site-content/src/main/java/com/capitalone/dashboard/model/EnvironmentStage.java
site-content/src/main/java/com/capitalone/dashboard/model/RallyBurnDownData.java
site-content/src/main/java/com/capitalone/dashboard/model/PerformanceMetricStatus.java
site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyType.java
site-content/src/main/java/com/capitalone/dashboard/model/ScoreDisplayType.java
site-content/src/main/java/com/capitalone/dashboard/model/RequestLog.java
site-content/src/main/java/com/capitalone/dashboard/model/Configuration.java
site-content/src/main/java/com/capitalone/dashboard/model/Collector.java
site-content/src/main/java/com/capitalone/dashboard/model/NameValue.java
site-content/src/main/java/com/capitalone/dashboard/model/CodeQuality.java
site-content/src/main/java/com/capitalone/dashboard/model/CodeQualityMetricStatus.java
site-content/src/main/java/com/capitalone/dashboard/model/RallyStoryStages.java
site-content/src/main/java/com/capitalone/dashboard/model/TeamMember.java
site-content/src/main/java/com/capitalone/dashboard/model/CollectorItem.java
site-content/src/main/java/com/capitalone/dashboard/model/TeamLevelDetails.java
site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyResult.java
site-content/src/main/java/com/capitalone/dashboard/model/Performance.java
site-content/src/main/java/com/capitalone/dashboard/model/Component.java
site-content/src/main/java/com/capitalone/dashboard/model/StoryIndicator.java
site-content/src/main/java/com/capitalone/dashboard/model/PipelineStage.java
site-content/src/main/java/com/capitalone/dashboard/model/Dashboard.java
site-content/src/main/java/com/capitalone/dashboard/model/ServiceAccount.java
site-content/src/main/java/com/capitalone/dashboard/model/Commit.java
site-content/src/main/java/com/capitalone/dashboard/model/PipelineCommit.java
site-content/src/main/java/com/capitalone/dashboard/model/TestSuiteType.java
site-content/src/main/java/com/capitalone/dashboard/model/AuditResult.java
site-content/src/main/java/com/capitalone/dashboard/model/CollectorItemConfigHistory.java
site-content/src/main/java/com/capitalone/dashboard/model/PerformanceType.java
site-content/src/main/java/com/capitalone/dashboard/model/Authentication.java
site-content/src/main/java/com/capitalone/dashboard/model/CodeQualityType.java
site-content/src/main/java/com/capitalone/dashboard/model/CloudInstance.java
site-content/src/main/java/com/capitalone/dashboard/model/MaturityModel.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreTypeValue.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreComponentSettings.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreType.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreThresholdSettings.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteriaSettings.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScmScoreSettings.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/QualityScoreSettings.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/BuildScoreSettings.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/PropagateType.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/DeployScoreSettings.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ComponentAlert.java
site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteria.java
site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreCollectorItem.java
site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreValueType.java
site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetric.java
site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetricBase.java
site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreMetric.java
site-content/src/main/java/com/capitalone/dashboard/model/UserInfo.java
site-content/src/main/java/com/capitalone/dashboard/model/PolicyScanMetric.java
site-content/src/main/java/com/capitalone/dashboard/model/Cmdb.java
site-content/src/main/java/com/capitalone/dashboard/model/Comment.java
site-content/src/main/java/com/capitalone/dashboard/model/EnvironmentComponent.java
site-content/src/main/java/com/capitalone/dashboard/model/Service.java
site-content/src/main/java/com/capitalone/dashboard/model/CloudInstanceHistory.java
site-content/src/main/java/com/capitalone/dashboard/model/Monitor2.java
site-content/src/main/java/com/capitalone/dashboard/model/ConfigHistOperationType.java
site-content/src/main/java/com/capitalone/dashboard/model/SprintEstimate.java
site-content/src/main/java/com/capitalone/dashboard/model/CommitStatus.java
site-content/src/main/java/com/capitalone/dashboard/model/ServiceStatus.java
site-content/src/main/java/com/capitalone/dashboard/model/CloudSubNetwork.java
site-content/src/main/java/com/capitalone/dashboard/model/CloudVolumeStorage.java
site-content/src/main/java/com/capitalone/dashboard/model/Owner.java
site-content/src/main/java/com/capitalone/dashboard/model/AuditType.java
site-content/src/main/java/com/capitalone/dashboard/model/EnvironmentStatus.java
site-content/src/main/java/com/capitalone/dashboard/model/TestCaseCondition.java
site-content/src/main/java/com/capitalone/dashboard/model/CollectorType.java
site-content/src/main/java/com/capitalone/dashboard/model/ApiToken.java
site-content/src/main/java/com/capitalone/dashboard/model/AuthType.java
site-content/src/main/java/com/capitalone/dashboard/model/Template.java
site-content/src/main/java/com/capitalone/dashboard/model/CommitType.java
site-content/src/main/java/com/capitalone/dashboard/model/Incident.java
site-content/src/main/java/com/capitalone/dashboard/model/BinaryArtifact.java
site-content/src/main/java/com/capitalone/dashboard/model/SCM.java
site-content/src/main/java/com/capitalone/dashboard/model/TestCapability.java
site-content/src/main/java/com/capitalone/dashboard/model/KeyValueLog.java
site-content/src/main/java/com/capitalone/dashboard/model/CollectionError.java
site-content/src/main/java/com/capitalone/dashboard/model/RallyFeature.java
site-content/src/main/java/com/capitalone/dashboard/model/Widget.java
site-content/src/main/java/com/capitalone/dashboard/model/TestResult.java
site-content/src/main/java/com/capitalone/dashboard/model/TeamInventory.java
site-content/src/main/java/com/capitalone/dashboard/model/CodeQualityMetric.java
site-content/src/main/java/com/capitalone/dashboard/model/ScopeOwnerCollectorItem.java
site-content/src/main/java/com/capitalone/dashboard/model/TestCase.java
site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatDisposition.java
site-content/src/main/java/com/capitalone/dashboard/model/ArtifactIdentifier.java
site-content/src/main/java/com/capitalone/dashboard/model/FeatureStatus.java
site-content/src/main/java/com/capitalone/dashboard/model/package-info.java
site-content/src/main/java/com/capitalone/dashboard/model/NameValueCount.java
site-content/src/main/java/com/capitalone/dashboard/model/FeatureHistory.java
site-content/src/main/java/com/capitalone/dashboard/model/TestSuite.java
site-content/src/main/java/com/capitalone/dashboard/model/FortifyScanReport.java
site-content/src/main/java/com/capitalone/dashboard/request/CloudVirtualNetworkListRefreshRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/CodeQualityCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/GitRequestCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/DeployDataCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/TestDataCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/PerformanceCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/CloudInstanceCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/CloudSubnetListRefreshRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/CloudVolumeCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/GenericCollectorItemCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/CloudSubnetCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/PerfTestDataCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/BinaryArtifactCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/ConfigurationCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/Monitor2DataCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/CommitCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/CloudInstanceListRefreshRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/CloudVolumeListRefreshRequest.java
site-content/src/main/java/com/capitalone/dashboard/request/BuildDataCreateRequest.java
site-content/src/main/java/com/capitalone/dashboard/event/DashboardEventListener.java
site-content/src/main/java/com/capitalone/dashboard/event/HygieiaMongoEventListener.java
site-content/src/main/java/com/capitalone/dashboard/event/CodeQualityEventListener.java
site-content/src/main/java/com/capitalone/dashboard/event/BuildEventListener.java
site-content/src/main/java/com/capitalone/dashboard/event/RelatedCollectorItemEventListener.java
site-content/src/main/java/com/capitalone/dashboard/event/EnvironmentComponentEventListener.java
site-content/src/main/java/com/capitalone/dashboard/event/sync/SyncException.java
site-content/src/main/java/com/capitalone/dashboard/event/sync/SyncDashboard.java
site-content/src/main/java/com/capitalone/dashboard/event/TestResultEventListener.java
site-content/src/main/java/com/capitalone/dashboard/event/CommitEventListener.java
site-content/src/main/java/com/capitalone/dashboard/testutil/FongoConfig.java
site-content/src/main/java/com/capitalone/dashboard/testutil/TestRestOperations.java
site-content/src/main/java/com/capitalone/dashboard/testutil/TestRestTemplate.java
site-content/src/main/java/com/capitalone/dashboard/testutil/GsonUtil.java
site-content/src/main/java/com/capitalone/dashboard/testutil/BaseCollectorTestConfig.java
site-content/src/main/java/com/capitalone/dashboard/testutil/TestResponse.java
site-content/src/main/java/com/capitalone/dashboard/client/RestAuthType.java
site-content/src/main/java/com/capitalone/dashboard/client/RestUserInfo.java
site-content/src/main/java/com/capitalone/dashboard/client/RestClient.java
create_collector.md
.travis.yml
src/devops/pmd.xml
src/devops/release.sh
src/devops/deploy-snapshot.sh
src/devops/.travis.settings.xml
src/test/resources/artifacts/artifacts.json
src/test/resources/collectors/coll.json
src/test/resources/component/component.json
src/test/resources/builds/builds.json
src/test/resources/librarypolicy/librarypolicy.json
src/test/resources/dashboard/dashboard.json
src/test/resources/codequality/codequality.json
src/test/resources/test_results/test_results.json
src/test/resources/collector_items/items.json
src/test/resources/securityscan/securityscan.json
src/test/java/com/capitalone/dashboard/repository/FongoBaseRepositoryTest.java
src/test/java/com/capitalone/dashboard/repository/CollectorTaskTests.java
src/test/java/com/capitalone/dashboard/repository/CollectorItemRepositoryTest.java
src/test/java/com/capitalone/dashboard/repository/FongoConfig.java
src/test/java/com/capitalone/dashboard/repository/TemplateRepositoryTest.java
src/test/java/com/capitalone/dashboard/repository/AuthenticationRepositoryTest.java
src/test/java/com/capitalone/dashboard/repository/FeatureRepositoryTest.java
src/test/java/com/capitalone/dashboard/repository/ScopeOwnerRepositoryTest.java
src/test/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepositoryTest.java
src/test/java/com/capitalone/dashboard/repository/DashboardCreateTests.java
src/test/java/com/capitalone/dashboard/repository/TeamRepositoryTest.java
src/test/java/com/capitalone/dashboard/repository/ScopeRepositoryTest.java
src/test/java/com/capitalone/dashboard/util/HygieiaUtilsTest.java
src/test/java/com/capitalone/dashboard/util/TestUtils.java
src/test/java/com/capitalone/dashboard/util/EncryptionTests.java
src/test/java/com/capitalone/dashboard/util/PipelineUtilsTest.java
src/test/java/com/capitalone/dashboard/util/DashboardUtilsTest.java
src/test/java/com/capitalone/dashboard/util/LoadTestData.java
src/test/java/com/capitalone/dashboard/util/GitBranchSpecTest.java
src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskTwoWithGenericItem.java
src/test/java/com/capitalone/dashboard/collector/CollectorTaskTest.java
src/test/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItemTest.java
src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskWithGenericItem.java
src/test/java/com/capitalone/dashboard/model/DashboardTest.java
src/test/java/com/capitalone/dashboard/model/LibraryPolicyResultTest.java
src/test/java/com/capitalone/dashboard/model/StandardWidgetTest.java
src/test/java/com/capitalone/dashboard/model/ComponentTest.java
src/test/java/com/capitalone/dashboard/event/EnvironmentComponentEventListenerTest.java
src/test/java/com/capitalone/dashboard/event/TestResultEventListenerTest.java
src/test/java/com/capitalone/dashboard/event/CommitEventListenerTest.java
src/test/java/com/capitalone/dashboard/event/BuildEventListenerTest.java
src/test/java/com/capitalone/dashboard/event/sync/SyncDashboardTest.java
src/test/java/com/capitalone/dashboard/MarkdownTest.java
src/main/resources/logback.xml
src/main/java/com/capitalone/dashboard/misc/HygieiaException.java
src/main/java/com/capitalone/dashboard/repository/AuditResultRepository.java
src/main/java/com/capitalone/dashboard/repository/CollectorItemRepository.java
src/main/java/com/capitalone/dashboard/repository/ChangeOrderRepository.java
src/main/java/com/capitalone/dashboard/repository/RequestLogRepository.java
src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryCustom.java
src/main/java/com/capitalone/dashboard/repository/EnvironmentComponentRepository.java
src/main/java/com/capitalone/dashboard/repository/GitHubRepoRepository.java
src/main/java/com/capitalone/dashboard/repository/AuthenticationRepository.java
src/main/java/com/capitalone/dashboard/repository/GenericCollectorItemRepository.java
src/main/java/com/capitalone/dashboard/repository/RallyBurnDownRepository.java
src/main/java/com/capitalone/dashboard/repository/CloudVolumeRepository.java
src/main/java/com/capitalone/dashboard/repository/BuildRepository.java
src/main/java/com/capitalone/dashboard/repository/ApiTokenRepository.java
src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQuery.java
src/main/java/com/capitalone/dashboard/repository/CloudInstanceHistoryRepository.java
src/main/java/com/capitalone/dashboard/repository/FortifyScanRepository.java
src/main/java/com/capitalone/dashboard/repository/IncidentRepository.java
src/main/java/com/capitalone/dashboard/repository/JobRepository.java
src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepository.java
src/main/java/com/capitalone/dashboard/repository/LibraryPolicyResultsRepository.java
src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryImpl.java
src/main/java/com/capitalone/dashboard/repository/ServiceAccountRepository.java
src/main/java/com/capitalone/dashboard/repository/ScopeRepository.java
src/main/java/com/capitalone/dashboard/repository/ScoreCriteriaSettingsRepository.java
src/main/java/com/capitalone/dashboard/repository/CloudSubNetworkRepository.java
src/main/java/com/capitalone/dashboard/repository/CollItemConfigHistoryRepository.java
src/main/java/com/capitalone/dashboard/repository/BaseCollectorItemRepository.java
src/main/java/com/capitalone/dashboard/repository/TeamRepository.java
src/main/java/com/capitalone/dashboard/repository/CodeQualityRepository.java
src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryImpl.java
src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryCustom.java
src/main/java/com/capitalone/dashboard/repository/DashboardRepository.java
src/main/java/com/capitalone/dashboard/repository/TemplateRepository.java
src/main/java/com/capitalone/dashboard/repository/ScoreRepository.java
src/main/java/com/capitalone/dashboard/repository/CloudInstanceRepository.java
src/main/java/com/capitalone/dashboard/repository/CmdbRepository.java
src/main/java/com/capitalone/dashboard/repository/CloudVirtualNetworkRepository.java
src/main/java/com/capitalone/dashboard/repository/ScoreCollectorItemRepository.java
src/main/java/com/capitalone/dashboard/repository/UserInfoRepository.java
src/main/java/com/capitalone/dashboard/repository/ScopeOwnerRepository.java
src/main/java/com/capitalone/dashboard/repository/ComponentRepository.java
src/main/java/com/capitalone/dashboard/repository/Monitor2Repository.java
src/main/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepository.java
src/main/java/com/capitalone/dashboard/repository/PipelineRepository.java
src/main/java/com/capitalone/dashboard/repository/ConfigurationRepository.java
src/main/java/com/capitalone/dashboard/repository/RallyFeatureRepository.java
src/main/java/com/capitalone/dashboard/repository/CommitRepository.java
src/main/java/com/capitalone/dashboard/repository/CodeReposBuildsRepository.java
src/main/java/com/capitalone/dashboard/repository/MaturityModelRepository.java
src/main/java/com/capitalone/dashboard/repository/RepositoryPackage.java
src/main/java/com/capitalone/dashboard/repository/EnvironmentStatusRepository.java
src/main/java/com/capitalone/dashboard/repository/TeamInventoryRepository.java
src/main/java/com/capitalone/dashboard/repository/PerformanceRepository.java
src/main/java/com/capitalone/dashboard/repository/CollectorRepository.java
src/main/java/com/capitalone/dashboard/repository/ServiceRepository.java
src/main/java/com/capitalone/dashboard/repository/GitRequestRepository.java
src/main/java/com/capitalone/dashboard/repository/BaseCollectorRepository.java
src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQueryImpl.java
src/main/java/com/capitalone/dashboard/repository/TestResultRepository.java
src/main/java/com/capitalone/dashboard/response/BuildDataCreateResponse.java
src/main/java/com/capitalone/dashboard/response/CloudVolumeAggregatedResponse.java
src/main/java/com/capitalone/dashboard/response/CloudVirtualNetworkAggregatedResponse.java
src/main/java/com/capitalone/dashboard/response/RallyBurnDownResponse.java
src/main/java/com/capitalone/dashboard/response/CloudSubNetworkAggregatedResponse.java
src/main/java/com/capitalone/dashboard/util/PipelineUtils.java
src/main/java/com/capitalone/dashboard/util/EncryptionException.java
src/main/java/com/capitalone/dashboard/util/FeatureCollectorConstants.java
src/main/java/com/capitalone/dashboard/util/CoreFeatureSettings.java
src/main/java/com/capitalone/dashboard/util/Supplier.java
src/main/java/com/capitalone/dashboard/util/HygieiaUtils.java
src/main/java/com/capitalone/dashboard/util/SuperFeatureComparator.java
src/main/java/com/capitalone/dashboard/util/Encryption.java
src/main/java/com/capitalone/dashboard/util/DashboardUtils.java
src/main/java/com/capitalone/dashboard/util/GitHubParsedUrl.java
src/main/java/com/capitalone/dashboard/util/GitBranchSpec.java
src/main/java/com/capitalone/dashboard/util/UnsafeDeleteException.java
src/main/java/com/capitalone/dashboard/config/CollectorConfig.java
src/main/java/com/capitalone/dashboard/config/collector/CloudConfig.java
src/main/java/com/capitalone/dashboard/config/MongoConfig.java
src/main/java/com/capitalone/dashboard/collector/CollectorTask.java
src/main/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItem.java
src/main/java/com/capitalone/dashboard/collector/RestOperationsSupplier.java
src/main/java/com/capitalone/dashboard/status/LibraryPolicyAuditStatus.java
src/main/java/com/capitalone/dashboard/status/CodeReviewAuditStatus.java
src/main/java/com/capitalone/dashboard/status/CodeQualityAuditStatus.java
src/main/java/com/capitalone/dashboard/status/ArtifactAuditStatus.java
src/main/java/com/capitalone/dashboard/status/TestResultAuditStatus.java
src/main/java/com/capitalone/dashboard/status/PerformanceTestAuditStatus.java
src/main/java/com/capitalone/dashboard/status/BuildAuditStatus.java
src/main/java/com/capitalone/dashboard/status/DashboardAuditStatus.java
src/main/java/com/capitalone/dashboard/model/JobCollectorItem.java
src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubRepo.java
src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubParsed.java
src/main/java/com/capitalone/dashboard/model/webhook/github/MergeEvent.java
src/main/java/com/capitalone/dashboard/model/RallyFeatureType.java
src/main/java/com/capitalone/dashboard/model/BaseModel.java
src/main/java/com/capitalone/dashboard/model/Build.java
src/main/java/com/capitalone/dashboard/model/TestCaseStep.java
src/main/java/com/capitalone/dashboard/model/GitRequest.java
src/main/java/com/capitalone/dashboard/model/DashboardType.java
src/main/java/com/capitalone/dashboard/model/Pipeline.java
src/main/java/com/capitalone/dashboard/model/GenericCollectorItem.java
src/main/java/com/capitalone/dashboard/model/UserRole.java
src/main/java/com/capitalone/dashboard/model/Stage.java
src/main/java/com/capitalone/dashboard/model/Team.java
src/main/java/com/capitalone/dashboard/model/TestCaseStatus.java
src/main/java/com/capitalone/dashboard/model/relation/RelatedCollectorItem.java
src/main/java/com/capitalone/dashboard/model/ChangeOrder.java
src/main/java/com/capitalone/dashboard/model/FeatureIssueLink.java
src/main/java/com/capitalone/dashboard/model/PipelineStageType.java
src/main/java/com/capitalone/dashboard/model/TestCaseConditionResult.java
src/main/java/com/capitalone/dashboard/model/Review.java
src/main/java/com/capitalone/dashboard/model/Application.java
src/main/java/com/capitalone/dashboard/model/ScopeOwner.java
src/main/java/com/capitalone/dashboard/model/PerformanceMetric.java
src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatLevel.java
src/main/java/com/capitalone/dashboard/model/CodeReposBuilds.java
src/main/java/com/capitalone/dashboard/model/RepoBranch.java
src/main/java/com/capitalone/dashboard/model/quality/FindBugsXmlReport.java
src/main/java/com/capitalone/dashboard/model/quality/PmdReport.java
src/main/java/com/capitalone/dashboard/model/quality/JacocoXmlReport.java
src/main/java/com/capitalone/dashboard/model/quality/ArtifactType.java
src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitor.java
src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitee.java
src/main/java/com/capitalone/dashboard/model/quality/JunitXmlReport.java
src/main/java/com/capitalone/dashboard/model/quality/CheckstyleReport.java
src/main/java/com/capitalone/dashboard/model/UserStory.java
src/main/java/com/capitalone/dashboard/model/StandardWidget.java
src/main/java/com/capitalone/dashboard/model/BuildStatus.java
src/main/java/com/capitalone/dashboard/model/CloudVirtualNetwork.java
src/main/java/com/capitalone/dashboard/model/EnvironmentStage.java
src/main/java/com/capitalone/dashboard/model/RallyBurnDownData.java
src/main/java/com/capitalone/dashboard/model/PerformanceMetricStatus.java
src/main/java/com/capitalone/dashboard/model/LibraryPolicyType.java
src/main/java/com/capitalone/dashboard/model/ScoreDisplayType.java
src/main/java/com/capitalone/dashboard/model/RequestLog.java
src/main/java/com/capitalone/dashboard/model/Configuration.java
src/main/java/com/capitalone/dashboard/model/Collector.java
src/main/java/com/capitalone/dashboard/model/NameValue.java
src/main/java/com/capitalone/dashboard/model/CodeQuality.java
src/main/java/com/capitalone/dashboard/model/CodeQualityMetricStatus.java
src/main/java/com/capitalone/dashboard/model/RallyStoryStages.java
src/main/java/com/capitalone/dashboard/model/TeamMember.java
src/main/java/com/capitalone/dashboard/model/CollectorItem.java
src/main/java/com/capitalone/dashboard/model/TeamLevelDetails.java
src/main/java/com/capitalone/dashboard/model/LibraryPolicyResult.java
src/main/java/com/capitalone/dashboard/model/Performance.java
src/main/java/com/capitalone/dashboard/model/Component.java
src/main/java/com/capitalone/dashboard/model/StoryIndicator.java
src/main/java/com/capitalone/dashboard/model/PipelineStage.java
src/main/java/com/capitalone/dashboard/model/Dashboard.java
src/main/java/com/capitalone/dashboard/model/ServiceAccount.java
src/main/java/com/capitalone/dashboard/model/Commit.java
src/main/java/com/capitalone/dashboard/model/PipelineCommit.java
src/main/java/com/capitalone/dashboard/model/TestSuiteType.java
src/main/java/com/capitalone/dashboard/model/AuditResult.java
src/main/java/com/capitalone/dashboard/model/CollectorItemConfigHistory.java
src/main/java/com/capitalone/dashboard/model/PerformanceType.java
src/main/java/com/capitalone/dashboard/model/Authentication.java
src/main/java/com/capitalone/dashboard/model/CodeQualityType.java
src/main/java/com/capitalone/dashboard/model/CloudInstance.java
src/main/java/com/capitalone/dashboard/model/MaturityModel.java
src/main/java/com/capitalone/dashboard/model/score/settings/ScoreTypeValue.java
src/main/java/com/capitalone/dashboard/model/score/settings/ScoreComponentSettings.java
src/main/java/com/capitalone/dashboard/model/score/settings/ScoreType.java
src/main/java/com/capitalone/dashboard/model/score/settings/ScoreThresholdSettings.java
src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteriaSettings.java
src/main/java/com/capitalone/dashboard/model/score/settings/ScmScoreSettings.java
src/main/java/com/capitalone/dashboard/model/score/settings/QualityScoreSettings.java
src/main/java/com/capitalone/dashboard/model/score/settings/BuildScoreSettings.java
src/main/java/com/capitalone/dashboard/model/score/settings/PropagateType.java
src/main/java/com/capitalone/dashboard/model/score/settings/DeployScoreSettings.java
src/main/java/com/capitalone/dashboard/model/score/settings/ComponentAlert.java
src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteria.java
src/main/java/com/capitalone/dashboard/model/score/ScoreCollectorItem.java
src/main/java/com/capitalone/dashboard/model/score/ScoreValueType.java
src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetric.java
src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetricBase.java
src/main/java/com/capitalone/dashboard/model/score/ScoreMetric.java
src/main/java/com/capitalone/dashboard/model/UserInfo.java
src/main/java/com/capitalone/dashboard/model/PolicyScanMetric.java
src/main/java/com/capitalone/dashboard/model/Cmdb.java
src/main/java/com/capitalone/dashboard/model/Comment.java
src/main/java/com/capitalone/dashboard/model/EnvironmentComponent.java
src/main/java/com/capitalone/dashboard/model/Service.java
src/main/java/com/capitalone/dashboard/model/CloudInstanceHistory.java
src/main/java/com/capitalone/dashboard/model/Monitor2.java
src/main/java/com/capitalone/dashboard/model/ConfigHistOperationType.java
src/main/java/com/capitalone/dashboard/model/SprintEstimate.java
src/main/java/com/capitalone/dashboard/model/CommitStatus.java
src/main/java/com/capitalone/dashboard/model/ServiceStatus.java
src/main/java/com/capitalone/dashboard/model/CloudSubNetwork.java
src/main/java/com/capitalone/dashboard/model/CloudVolumeStorage.java
src/main/java/com/capitalone/dashboard/model/Owner.java
src/main/java/com/capitalone/dashboard/model/AuditType.java
src/main/java/com/capitalone/dashboard/model/EnvironmentStatus.java
src/main/java/com/capitalone/dashboard/model/TestCaseCondition.java
src/main/java/com/capitalone/dashboard/model/CollectorType.java
src/main/java/com/capitalone/dashboard/model/ApiToken.java
src/main/java/com/capitalone/dashboard/model/AuthType.java
src/main/java/com/capitalone/dashboard/model/Template.java
src/main/java/com/capitalone/dashboard/model/CommitType.java
src/main/java/com/capitalone/dashboard/model/Incident.java
src/main/java/com/capitalone/dashboard/model/BinaryArtifact.java
src/main/java/com/capitalone/dashboard/model/SCM.java
src/main/java/com/capitalone/dashboard/model/TestCapability.java
src/main/java/com/capitalone/dashboard/model/KeyValueLog.java
src/main/java/com/capitalone/dashboard/model/CollectionError.java
src/main/java/com/capitalone/dashboard/model/RallyFeature.java
src/main/java/com/capitalone/dashboard/model/Widget.java
src/main/java/com/capitalone/dashboard/model/TestResult.java
src/main/java/com/capitalone/dashboard/model/TeamInventory.java
src/main/java/com/capitalone/dashboard/model/CodeQualityMetric.java
src/main/java/com/capitalone/dashboard/model/ScopeOwnerCollectorItem.java
src/main/java/com/capitalone/dashboard/model/TestCase.java
src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatDisposition.java
src/main/java/com/capitalone/dashboard/model/ArtifactIdentifier.java
src/main/java/com/capitalone/dashboard/model/FeatureStatus.java
src/main/java/com/capitalone/dashboard/model/package-info.java
src/main/java/com/capitalone/dashboard/model/NameValueCount.java
src/main/java/com/capitalone/dashboard/model/FeatureHistory.java
src/main/java/com/capitalone/dashboard/model/TestSuite.java
src/main/java/com/capitalone/dashboard/model/FortifyScanReport.java
src/main/java/com/capitalone/dashboard/request/CloudVirtualNetworkListRefreshRequest.java
src/main/java/com/capitalone/dashboard/request/CodeQualityCreateRequest.java
src/main/java/com/capitalone/dashboard/request/GitRequestCreateRequest.java
src/main/java/com/capitalone/dashboard/request/DeployDataCreateRequest.java
src/main/java/com/capitalone/dashboard/request/TestDataCreateRequest.java
src/main/java/com/capitalone/dashboard/request/PerformanceCreateRequest.java
src/main/java/com/capitalone/dashboard/request/CloudInstanceCreateRequest.java
src/main/java/com/capitalone/dashboard/request/CloudSubnetListRefreshRequest.java
src/main/java/com/capitalone/dashboard/request/CloudVolumeCreateRequest.java
src/main/java/com/capitalone/dashboard/request/GenericCollectorItemCreateRequest.java
src/main/java/com/capitalone/dashboard/request/CloudSubnetCreateRequest.java
src/main/java/com/capitalone/dashboard/request/PerfTestDataCreateRequest.java
src/main/java/com/capitalone/dashboard/request/BinaryArtifactCreateRequest.java
src/main/java/com/capitalone/dashboard/request/ConfigurationCreateRequest.java
src/main/java/com/capitalone/dashboard/request/Monitor2DataCreateRequest.java
src/main/java/com/capitalone/dashboard/request/CommitCreateRequest.java
src/main/java/com/capitalone/dashboard/request/CloudInstanceListRefreshRequest.java
src/main/java/com/capitalone/dashboard/request/CloudVolumeListRefreshRequest.java
src/main/java/com/capitalone/dashboard/request/BuildDataCreateRequest.java
src/main/java/com/capitalone/dashboard/event/DashboardEventListener.java
src/main/java/com/capitalone/dashboard/event/HygieiaMongoEventListener.java
src/main/java/com/capitalone/dashboard/event/CodeQualityEventListener.java
src/main/java/com/capitalone/dashboard/event/BuildEventListener.java
src/main/java/com/capitalone/dashboard/event/RelatedCollectorItemEventListener.java
src/main/java/com/capitalone/dashboard/event/EnvironmentComponentEventListener.java
src/main/java/com/capitalone/dashboard/event/sync/SyncException.java
src/main/java/com/capitalone/dashboard/event/sync/SyncDashboard.java
src/main/java/com/capitalone/dashboard/event/TestResultEventListener.java
src/main/java/com/capitalone/dashboard/event/CommitEventListener.java
src/main/java/com/capitalone/dashboard/testutil/FongoConfig.java
src/main/java/com/capitalone/dashboard/testutil/TestRestOperations.java
src/main/java/com/capitalone/dashboard/testutil/TestRestTemplate.java
src/main/java/com/capitalone/dashboard/testutil/GsonUtil.java
src/main/java/com/capitalone/dashboard/testutil/BaseCollectorTestConfig.java
src/main/java/com/capitalone/dashboard/testutil/TestResponse.java
src/main/java/com/capitalone/dashboard/client/RestAuthType.java
src/main/java/com/capitalone/dashboard/client/RestUserInfo.java
src/main/java/com/capitalone/dashboard/client/RestClient.java
*****************************************************
*****************************************************
Files with Apache License headers will be marked AL
Binary files (which do not require any license headers) will be marked B
Compressed archives will be marked A
Notices, licenses etc. will be marked N
N LICENSE
AL pom.xml
!????? MAINTAINERS
!????? README.md
N site-content/LICENSE
!????? site-content/pom.xml
!????? site-content/pmd.xml
!????? site-content/MAINTAINERS
!????? site-content/README.md
B site-content/travis-utilities/keys.gpg.enc
!????? site-content/travis-utilities/release.sh
!????? site-content/travis-utilities/deploy-snapshot.sh
!????? site-content/travis-utilities/.travis.settings.xml
!????? site-content/checkstyle.xml
!????? site-content/create_collector.md
!????? site-content/.travis.yml
!????? site-content/src/test/resources/artifacts/artifacts.json
!????? site-content/src/test/resources/collectors/coll.json
!????? site-content/src/test/resources/component/component.json
!????? site-content/src/test/resources/builds/builds.json
!????? site-content/src/test/resources/librarypolicy/librarypolicy.json
!????? site-content/src/test/resources/dashboard/dashboard.json
!????? site-content/src/test/resources/codequality/codequality.json
!????? site-content/src/test/resources/test_results/test_results.json
!????? site-content/src/test/resources/collector_items/items.json
!????? site-content/src/test/resources/securityscan/securityscan.json
!????? site-content/src/test/java/com/capitalone/dashboard/repository/FongoBaseRepositoryTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/CollectorTaskTests.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/CollectorItemRepositoryTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/FongoConfig.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/TemplateRepositoryTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/AuthenticationRepositoryTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/FeatureRepositoryTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/ScopeOwnerRepositoryTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepositoryTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/DashboardCreateTests.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/TeamRepositoryTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/repository/ScopeRepositoryTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/util/HygieiaUtilsTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/util/TestUtils.java
!????? site-content/src/test/java/com/capitalone/dashboard/util/EncryptionTests.java
!????? site-content/src/test/java/com/capitalone/dashboard/util/PipelineUtilsTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/util/DashboardUtilsTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/util/LoadTestData.java
!????? site-content/src/test/java/com/capitalone/dashboard/util/GitBranchSpecTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskTwoWithGenericItem.java
!????? site-content/src/test/java/com/capitalone/dashboard/collector/CollectorTaskTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItemTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskWithGenericItem.java
!????? site-content/src/test/java/com/capitalone/dashboard/model/DashboardTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/model/LibraryPolicyResultTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/model/StandardWidgetTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/model/ComponentTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/event/EnvironmentComponentEventListenerTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/event/TestResultEventListenerTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/event/CommitEventListenerTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/event/BuildEventListenerTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/event/sync/SyncDashboardTest.java
!????? site-content/src/test/java/com/capitalone/dashboard/MarkdownTest.java
!????? site-content/src/main/resources/logback.xml
!????? site-content/src/main/java/com/capitalone/dashboard/misc/HygieiaException.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/AuditResultRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CollectorItemRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ChangeOrderRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/RequestLogRepository.java
AL site-content/src/main/java/com/capitalone/dashboard/repository/FeatureRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryCustom.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/EnvironmentComponentRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/GitHubRepoRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/AuthenticationRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/GenericCollectorItemRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/RallyBurnDownRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CloudVolumeRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/BuildRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ApiTokenRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQuery.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CloudInstanceHistoryRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/FortifyScanRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/IncidentRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/JobRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/LibraryPolicyResultsRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryImpl.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ServiceAccountRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ScopeRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ScoreCriteriaSettingsRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CloudSubNetworkRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CollItemConfigHistoryRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/BaseCollectorItemRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/TeamRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CodeQualityRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryImpl.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryCustom.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/DashboardRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/TemplateRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ScoreRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CloudInstanceRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CmdbRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CloudVirtualNetworkRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ScoreCollectorItemRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/UserInfoRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ScopeOwnerRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ComponentRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/Monitor2Repository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/PipelineRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ConfigurationRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/RallyFeatureRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CommitRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CodeReposBuildsRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/MaturityModelRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/RepositoryPackage.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/EnvironmentStatusRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/TeamInventoryRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/PerformanceRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CollectorRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/ServiceRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/GitRequestRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/BaseCollectorRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQueryImpl.java
!????? site-content/src/main/java/com/capitalone/dashboard/repository/TestResultRepository.java
!????? site-content/src/main/java/com/capitalone/dashboard/response/BuildDataCreateResponse.java
!????? site-content/src/main/java/com/capitalone/dashboard/response/CloudVolumeAggregatedResponse.java
!????? site-content/src/main/java/com/capitalone/dashboard/response/CloudVirtualNetworkAggregatedResponse.java
!????? site-content/src/main/java/com/capitalone/dashboard/response/RallyBurnDownResponse.java
!????? site-content/src/main/java/com/capitalone/dashboard/response/CloudSubNetworkAggregatedResponse.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/PipelineUtils.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/EncryptionException.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/FeatureCollectorConstants.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/CoreFeatureSettings.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/Supplier.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/HygieiaUtils.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/SuperFeatureComparator.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/Encryption.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/DashboardUtils.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/GitHubParsedUrl.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/GitBranchSpec.java
!????? site-content/src/main/java/com/capitalone/dashboard/util/UnsafeDeleteException.java
!????? site-content/src/main/java/com/capitalone/dashboard/config/CollectorConfig.java
!????? site-content/src/main/java/com/capitalone/dashboard/config/collector/CloudConfig.java
!????? site-content/src/main/java/com/capitalone/dashboard/config/MongoConfig.java
!????? site-content/src/main/java/com/capitalone/dashboard/collector/CollectorTask.java
!????? site-content/src/main/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItem.java
!????? site-content/src/main/java/com/capitalone/dashboard/collector/RestOperationsSupplier.java
!????? site-content/src/main/java/com/capitalone/dashboard/status/LibraryPolicyAuditStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/status/CodeReviewAuditStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/status/CodeQualityAuditStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/status/ArtifactAuditStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/status/TestResultAuditStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/status/PerformanceTestAuditStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/status/BuildAuditStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/status/DashboardAuditStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/JobCollectorItem.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubRepo.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubParsed.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/webhook/github/MergeEvent.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/RallyFeatureType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/BaseModel.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Build.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TestCaseStep.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/GitRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/DashboardType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Pipeline.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/GenericCollectorItem.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/UserRole.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Stage.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Team.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TestCaseStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/relation/RelatedCollectorItem.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/ChangeOrder.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/FeatureIssueLink.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/PipelineStageType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TestCaseConditionResult.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Review.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Application.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/ScopeOwner.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/PerformanceMetric.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatLevel.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CodeReposBuilds.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/RepoBranch.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/quality/FindBugsXmlReport.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/quality/PmdReport.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/quality/JacocoXmlReport.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/quality/ArtifactType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitor.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitee.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/quality/JunitXmlReport.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/quality/CheckstyleReport.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/UserStory.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/StandardWidget.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/BuildStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CloudVirtualNetwork.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/EnvironmentStage.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/RallyBurnDownData.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/PerformanceMetricStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/ScoreDisplayType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/RequestLog.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Configuration.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Collector.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/NameValue.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CodeQuality.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CodeQualityMetricStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/RallyStoryStages.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TeamMember.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CollectorItem.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TeamLevelDetails.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyResult.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Performance.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Component.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/StoryIndicator.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/PipelineStage.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Dashboard.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/ServiceAccount.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Commit.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/PipelineCommit.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TestSuiteType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/AuditResult.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CollectorItemConfigHistory.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/PerformanceType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Authentication.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CodeQualityType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CloudInstance.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/MaturityModel.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreTypeValue.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreComponentSettings.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreThresholdSettings.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteriaSettings.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScmScoreSettings.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/QualityScoreSettings.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/BuildScoreSettings.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/PropagateType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/DeployScoreSettings.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ComponentAlert.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteria.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreCollectorItem.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreValueType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetric.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetricBase.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreMetric.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/UserInfo.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/PolicyScanMetric.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Cmdb.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Comment.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/EnvironmentComponent.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Service.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CloudInstanceHistory.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Monitor2.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/ConfigHistOperationType.java
AL site-content/src/main/java/com/capitalone/dashboard/model/Scope.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/SprintEstimate.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CommitStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/ServiceStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CloudSubNetwork.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CloudVolumeStorage.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Owner.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/AuditType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/EnvironmentStatus.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TestCaseCondition.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CollectorType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/ApiToken.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/AuthType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Template.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CommitType.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Incident.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/BinaryArtifact.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/SCM.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TestCapability.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/KeyValueLog.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CollectionError.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/RallyFeature.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/Widget.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TestResult.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TeamInventory.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/CodeQualityMetric.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/ScopeOwnerCollectorItem.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TestCase.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatDisposition.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/ArtifactIdentifier.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/FeatureStatus.java
AL site-content/src/main/java/com/capitalone/dashboard/model/Feature.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/package-info.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/NameValueCount.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/FeatureHistory.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/TestSuite.java
!????? site-content/src/main/java/com/capitalone/dashboard/model/FortifyScanReport.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/CloudVirtualNetworkListRefreshRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/CodeQualityCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/GitRequestCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/DeployDataCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/TestDataCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/PerformanceCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/CloudInstanceCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/CloudSubnetListRefreshRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/CloudVolumeCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/GenericCollectorItemCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/CloudSubnetCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/PerfTestDataCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/BinaryArtifactCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/ConfigurationCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/Monitor2DataCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/CommitCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/CloudInstanceListRefreshRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/CloudVolumeListRefreshRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/request/BuildDataCreateRequest.java
!????? site-content/src/main/java/com/capitalone/dashboard/event/DashboardEventListener.java
!????? site-content/src/main/java/com/capitalone/dashboard/event/HygieiaMongoEventListener.java
!????? site-content/src/main/java/com/capitalone/dashboard/event/CodeQualityEventListener.java
!????? site-content/src/main/java/com/capitalone/dashboard/event/BuildEventListener.java
!????? site-content/src/main/java/com/capitalone/dashboard/event/RelatedCollectorItemEventListener.java
!????? site-content/src/main/java/com/capitalone/dashboard/event/EnvironmentComponentEventListener.java
!????? site-content/src/main/java/com/capitalone/dashboard/event/sync/SyncException.java
!????? site-content/src/main/java/com/capitalone/dashboard/event/sync/SyncDashboard.java
!????? site-content/src/main/java/com/capitalone/dashboard/event/TestResultEventListener.java
!????? site-content/src/main/java/com/capitalone/dashboard/event/CommitEventListener.java
!????? site-content/src/main/java/com/capitalone/dashboard/testutil/FongoConfig.java
!????? site-content/src/main/java/com/capitalone/dashboard/testutil/TestRestOperations.java
!????? site-content/src/main/java/com/capitalone/dashboard/testutil/TestRestTemplate.java
!????? site-content/src/main/java/com/capitalone/dashboard/testutil/GsonUtil.java
!????? site-content/src/main/java/com/capitalone/dashboard/testutil/BaseCollectorTestConfig.java
!????? site-content/src/main/java/com/capitalone/dashboard/testutil/TestResponse.java
!????? site-content/src/main/java/com/capitalone/dashboard/client/RestAuthType.java
!????? site-content/src/main/java/com/capitalone/dashboard/client/RestUserInfo.java
!????? site-content/src/main/java/com/capitalone/dashboard/client/RestClient.java
!????? create_collector.md
!????? .travis.yml
B src/devops/keys.gpg.enc
!????? src/devops/pmd.xml
AL src/devops/checkstyle-suppressions.xml
AL src/devops/checkstyle.xml
!????? src/devops/release.sh
!????? src/devops/deploy-snapshot.sh
!????? src/devops/.travis.settings.xml
!????? src/test/resources/artifacts/artifacts.json
!????? src/test/resources/collectors/coll.json
!????? src/test/resources/component/component.json
!????? src/test/resources/builds/builds.json
!????? src/test/resources/librarypolicy/librarypolicy.json
!????? src/test/resources/dashboard/dashboard.json
!????? src/test/resources/codequality/codequality.json
!????? src/test/resources/test_results/test_results.json
!????? src/test/resources/collector_items/items.json
!????? src/test/resources/securityscan/securityscan.json
!????? src/test/java/com/capitalone/dashboard/repository/FongoBaseRepositoryTest.java
!????? src/test/java/com/capitalone/dashboard/repository/CollectorTaskTests.java
!????? src/test/java/com/capitalone/dashboard/repository/CollectorItemRepositoryTest.java
!????? src/test/java/com/capitalone/dashboard/repository/FongoConfig.java
!????? src/test/java/com/capitalone/dashboard/repository/TemplateRepositoryTest.java
!????? src/test/java/com/capitalone/dashboard/repository/AuthenticationRepositoryTest.java
!????? src/test/java/com/capitalone/dashboard/repository/FeatureRepositoryTest.java
!????? src/test/java/com/capitalone/dashboard/repository/ScopeOwnerRepositoryTest.java
!????? src/test/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepositoryTest.java
!????? src/test/java/com/capitalone/dashboard/repository/DashboardCreateTests.java
!????? src/test/java/com/capitalone/dashboard/repository/TeamRepositoryTest.java
!????? src/test/java/com/capitalone/dashboard/repository/ScopeRepositoryTest.java
!????? src/test/java/com/capitalone/dashboard/util/HygieiaUtilsTest.java
!????? src/test/java/com/capitalone/dashboard/util/TestUtils.java
!????? src/test/java/com/capitalone/dashboard/util/EncryptionTests.java
!????? src/test/java/com/capitalone/dashboard/util/PipelineUtilsTest.java
!????? src/test/java/com/capitalone/dashboard/util/DashboardUtilsTest.java
!????? src/test/java/com/capitalone/dashboard/util/LoadTestData.java
!????? src/test/java/com/capitalone/dashboard/util/GitBranchSpecTest.java
!????? src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskTwoWithGenericItem.java
!????? src/test/java/com/capitalone/dashboard/collector/CollectorTaskTest.java
!????? src/test/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItemTest.java
!????? src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskWithGenericItem.java
!????? src/test/java/com/capitalone/dashboard/model/DashboardTest.java
!????? src/test/java/com/capitalone/dashboard/model/LibraryPolicyResultTest.java
!????? src/test/java/com/capitalone/dashboard/model/StandardWidgetTest.java
!????? src/test/java/com/capitalone/dashboard/model/ComponentTest.java
!????? src/test/java/com/capitalone/dashboard/event/EnvironmentComponentEventListenerTest.java
!????? src/test/java/com/capitalone/dashboard/event/TestResultEventListenerTest.java
!????? src/test/java/com/capitalone/dashboard/event/CommitEventListenerTest.java
!????? src/test/java/com/capitalone/dashboard/event/BuildEventListenerTest.java
!????? src/test/java/com/capitalone/dashboard/event/sync/SyncDashboardTest.java
!????? src/test/java/com/capitalone/dashboard/MarkdownTest.java
AL src/changes/changes.xml
AL src/site/xdoc/index.xml
AL src/site/site.xml
!????? src/main/resources/logback.xml
!????? src/main/java/com/capitalone/dashboard/misc/HygieiaException.java
!????? src/main/java/com/capitalone/dashboard/repository/AuditResultRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CollectorItemRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/ChangeOrderRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/RequestLogRepository.java
AL src/main/java/com/capitalone/dashboard/repository/FeatureRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryCustom.java
!????? src/main/java/com/capitalone/dashboard/repository/EnvironmentComponentRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/GitHubRepoRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/AuthenticationRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/GenericCollectorItemRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/RallyBurnDownRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CloudVolumeRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/BuildRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/ApiTokenRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQuery.java
!????? src/main/java/com/capitalone/dashboard/repository/CloudInstanceHistoryRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/FortifyScanRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/IncidentRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/JobRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/LibraryPolicyResultsRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryImpl.java
!????? src/main/java/com/capitalone/dashboard/repository/ServiceAccountRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/ScopeRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/ScoreCriteriaSettingsRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CloudSubNetworkRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CollItemConfigHistoryRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/BaseCollectorItemRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/TeamRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CodeQualityRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryImpl.java
!????? src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryCustom.java
!????? src/main/java/com/capitalone/dashboard/repository/DashboardRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/TemplateRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/ScoreRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CloudInstanceRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CmdbRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CloudVirtualNetworkRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/ScoreCollectorItemRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/UserInfoRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/ScopeOwnerRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/ComponentRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/Monitor2Repository.java
!????? src/main/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/PipelineRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/ConfigurationRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/RallyFeatureRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CommitRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CodeReposBuildsRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/MaturityModelRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/RepositoryPackage.java
!????? src/main/java/com/capitalone/dashboard/repository/EnvironmentStatusRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/TeamInventoryRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/PerformanceRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CollectorRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/ServiceRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/GitRequestRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/BaseCollectorRepository.java
!????? src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQueryImpl.java
!????? src/main/java/com/capitalone/dashboard/repository/TestResultRepository.java
!????? src/main/java/com/capitalone/dashboard/response/BuildDataCreateResponse.java
!????? src/main/java/com/capitalone/dashboard/response/CloudVolumeAggregatedResponse.java
!????? src/main/java/com/capitalone/dashboard/response/CloudVirtualNetworkAggregatedResponse.java
!????? src/main/java/com/capitalone/dashboard/response/RallyBurnDownResponse.java
!????? src/main/java/com/capitalone/dashboard/response/CloudSubNetworkAggregatedResponse.java
!????? src/main/java/com/capitalone/dashboard/util/PipelineUtils.java
!????? src/main/java/com/capitalone/dashboard/util/EncryptionException.java
!????? src/main/java/com/capitalone/dashboard/util/FeatureCollectorConstants.java
!????? src/main/java/com/capitalone/dashboard/util/CoreFeatureSettings.java
!????? src/main/java/com/capitalone/dashboard/util/Supplier.java
!????? src/main/java/com/capitalone/dashboard/util/HygieiaUtils.java
!????? src/main/java/com/capitalone/dashboard/util/SuperFeatureComparator.java
!????? src/main/java/com/capitalone/dashboard/util/Encryption.java
!????? src/main/java/com/capitalone/dashboard/util/DashboardUtils.java
!????? src/main/java/com/capitalone/dashboard/util/GitHubParsedUrl.java
!????? src/main/java/com/capitalone/dashboard/util/GitBranchSpec.java
!????? src/main/java/com/capitalone/dashboard/util/UnsafeDeleteException.java
!????? src/main/java/com/capitalone/dashboard/config/CollectorConfig.java
!????? src/main/java/com/capitalone/dashboard/config/collector/CloudConfig.java
!????? src/main/java/com/capitalone/dashboard/config/MongoConfig.java
!????? src/main/java/com/capitalone/dashboard/collector/CollectorTask.java
!????? src/main/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItem.java
!????? src/main/java/com/capitalone/dashboard/collector/RestOperationsSupplier.java
!????? src/main/java/com/capitalone/dashboard/status/LibraryPolicyAuditStatus.java
!????? src/main/java/com/capitalone/dashboard/status/CodeReviewAuditStatus.java
!????? src/main/java/com/capitalone/dashboard/status/CodeQualityAuditStatus.java
!????? src/main/java/com/capitalone/dashboard/status/ArtifactAuditStatus.java
!????? src/main/java/com/capitalone/dashboard/status/TestResultAuditStatus.java
!????? src/main/java/com/capitalone/dashboard/status/PerformanceTestAuditStatus.java
!????? src/main/java/com/capitalone/dashboard/status/BuildAuditStatus.java
!????? src/main/java/com/capitalone/dashboard/status/DashboardAuditStatus.java
!????? src/main/java/com/capitalone/dashboard/model/JobCollectorItem.java
!????? src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubRepo.java
!????? src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubParsed.java
!????? src/main/java/com/capitalone/dashboard/model/webhook/github/MergeEvent.java
!????? src/main/java/com/capitalone/dashboard/model/RallyFeatureType.java
!????? src/main/java/com/capitalone/dashboard/model/BaseModel.java
!????? src/main/java/com/capitalone/dashboard/model/Build.java
!????? src/main/java/com/capitalone/dashboard/model/TestCaseStep.java
!????? src/main/java/com/capitalone/dashboard/model/GitRequest.java
!????? src/main/java/com/capitalone/dashboard/model/DashboardType.java
!????? src/main/java/com/capitalone/dashboard/model/Pipeline.java
!????? src/main/java/com/capitalone/dashboard/model/GenericCollectorItem.java
!????? src/main/java/com/capitalone/dashboard/model/UserRole.java
!????? src/main/java/com/capitalone/dashboard/model/Stage.java
!????? src/main/java/com/capitalone/dashboard/model/Team.java
!????? src/main/java/com/capitalone/dashboard/model/TestCaseStatus.java
!????? src/main/java/com/capitalone/dashboard/model/relation/RelatedCollectorItem.java
!????? src/main/java/com/capitalone/dashboard/model/ChangeOrder.java
!????? src/main/java/com/capitalone/dashboard/model/FeatureIssueLink.java
!????? src/main/java/com/capitalone/dashboard/model/PipelineStageType.java
!????? src/main/java/com/capitalone/dashboard/model/TestCaseConditionResult.java
!????? src/main/java/com/capitalone/dashboard/model/Review.java
!????? src/main/java/com/capitalone/dashboard/model/Application.java
!????? src/main/java/com/capitalone/dashboard/model/ScopeOwner.java
!????? src/main/java/com/capitalone/dashboard/model/PerformanceMetric.java
!????? src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatLevel.java
!????? src/main/java/com/capitalone/dashboard/model/CodeReposBuilds.java
!????? src/main/java/com/capitalone/dashboard/model/RepoBranch.java
!????? src/main/java/com/capitalone/dashboard/model/quality/FindBugsXmlReport.java
!????? src/main/java/com/capitalone/dashboard/model/quality/PmdReport.java
!????? src/main/java/com/capitalone/dashboard/model/quality/JacocoXmlReport.java
!????? src/main/java/com/capitalone/dashboard/model/quality/ArtifactType.java
!????? src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitor.java
!????? src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitee.java
!????? src/main/java/com/capitalone/dashboard/model/quality/JunitXmlReport.java
!????? src/main/java/com/capitalone/dashboard/model/quality/CheckstyleReport.java
!????? src/main/java/com/capitalone/dashboard/model/UserStory.java
!????? src/main/java/com/capitalone/dashboard/model/StandardWidget.java
!????? src/main/java/com/capitalone/dashboard/model/BuildStatus.java
!????? src/main/java/com/capitalone/dashboard/model/CloudVirtualNetwork.java
!????? src/main/java/com/capitalone/dashboard/model/EnvironmentStage.java
!????? src/main/java/com/capitalone/dashboard/model/RallyBurnDownData.java
!????? src/main/java/com/capitalone/dashboard/model/PerformanceMetricStatus.java
!????? src/main/java/com/capitalone/dashboard/model/LibraryPolicyType.java
!????? src/main/java/com/capitalone/dashboard/model/ScoreDisplayType.java
!????? src/main/java/com/capitalone/dashboard/model/RequestLog.java
!????? src/main/java/com/capitalone/dashboard/model/Configuration.java
!????? src/main/java/com/capitalone/dashboard/model/Collector.java
!????? src/main/java/com/capitalone/dashboard/model/NameValue.java
!????? src/main/java/com/capitalone/dashboard/model/CodeQuality.java
!????? src/main/java/com/capitalone/dashboard/model/CodeQualityMetricStatus.java
!????? src/main/java/com/capitalone/dashboard/model/RallyStoryStages.java
!????? src/main/java/com/capitalone/dashboard/model/TeamMember.java
!????? src/main/java/com/capitalone/dashboard/model/CollectorItem.java
!????? src/main/java/com/capitalone/dashboard/model/TeamLevelDetails.java
!????? src/main/java/com/capitalone/dashboard/model/LibraryPolicyResult.java
!????? src/main/java/com/capitalone/dashboard/model/Performance.java
!????? src/main/java/com/capitalone/dashboard/model/Component.java
!????? src/main/java/com/capitalone/dashboard/model/StoryIndicator.java
!????? src/main/java/com/capitalone/dashboard/model/PipelineStage.java
!????? src/main/java/com/capitalone/dashboard/model/Dashboard.java
!????? src/main/java/com/capitalone/dashboard/model/ServiceAccount.java
!????? src/main/java/com/capitalone/dashboard/model/Commit.java
!????? src/main/java/com/capitalone/dashboard/model/PipelineCommit.java
!????? src/main/java/com/capitalone/dashboard/model/TestSuiteType.java
!????? src/main/java/com/capitalone/dashboard/model/AuditResult.java
!????? src/main/java/com/capitalone/dashboard/model/CollectorItemConfigHistory.java
!????? src/main/java/com/capitalone/dashboard/model/PerformanceType.java
!????? src/main/java/com/capitalone/dashboard/model/Authentication.java
!????? src/main/java/com/capitalone/dashboard/model/CodeQualityType.java
!????? src/main/java/com/capitalone/dashboard/model/CloudInstance.java
!????? src/main/java/com/capitalone/dashboard/model/MaturityModel.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/ScoreTypeValue.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/ScoreComponentSettings.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/ScoreType.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/ScoreThresholdSettings.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteriaSettings.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/ScmScoreSettings.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/QualityScoreSettings.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/BuildScoreSettings.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/PropagateType.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/DeployScoreSettings.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/ComponentAlert.java
!????? src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteria.java
!????? src/main/java/com/capitalone/dashboard/model/score/ScoreCollectorItem.java
!????? src/main/java/com/capitalone/dashboard/model/score/ScoreValueType.java
!????? src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetric.java
!????? src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetricBase.java
!????? src/main/java/com/capitalone/dashboard/model/score/ScoreMetric.java
!????? src/main/java/com/capitalone/dashboard/model/UserInfo.java
!????? src/main/java/com/capitalone/dashboard/model/PolicyScanMetric.java
!????? src/main/java/com/capitalone/dashboard/model/Cmdb.java
!????? src/main/java/com/capitalone/dashboard/model/Comment.java
!????? src/main/java/com/capitalone/dashboard/model/EnvironmentComponent.java
!????? src/main/java/com/capitalone/dashboard/model/Service.java
!????? src/main/java/com/capitalone/dashboard/model/CloudInstanceHistory.java
!????? src/main/java/com/capitalone/dashboard/model/Monitor2.java
!????? src/main/java/com/capitalone/dashboard/model/ConfigHistOperationType.java
AL src/main/java/com/capitalone/dashboard/model/Scope.java
!????? src/main/java/com/capitalone/dashboard/model/SprintEstimate.java
!????? src/main/java/com/capitalone/dashboard/model/CommitStatus.java
!????? src/main/java/com/capitalone/dashboard/model/ServiceStatus.java
!????? src/main/java/com/capitalone/dashboard/model/CloudSubNetwork.java
!????? src/main/java/com/capitalone/dashboard/model/CloudVolumeStorage.java
!????? src/main/java/com/capitalone/dashboard/model/Owner.java
!????? src/main/java/com/capitalone/dashboard/model/AuditType.java
!????? src/main/java/com/capitalone/dashboard/model/EnvironmentStatus.java
!????? src/main/java/com/capitalone/dashboard/model/TestCaseCondition.java
!????? src/main/java/com/capitalone/dashboard/model/CollectorType.java
!????? src/main/java/com/capitalone/dashboard/model/ApiToken.java
!????? src/main/java/com/capitalone/dashboard/model/AuthType.java
!????? src/main/java/com/capitalone/dashboard/model/Template.java
!????? src/main/java/com/capitalone/dashboard/model/CommitType.java
!????? src/main/java/com/capitalone/dashboard/model/Incident.java
!????? src/main/java/com/capitalone/dashboard/model/BinaryArtifact.java
!????? src/main/java/com/capitalone/dashboard/model/SCM.java
!????? src/main/java/com/capitalone/dashboard/model/TestCapability.java
!????? src/main/java/com/capitalone/dashboard/model/KeyValueLog.java
!????? src/main/java/com/capitalone/dashboard/model/CollectionError.java
!????? src/main/java/com/capitalone/dashboard/model/RallyFeature.java
!????? src/main/java/com/capitalone/dashboard/model/Widget.java
!????? src/main/java/com/capitalone/dashboard/model/TestResult.java
!????? src/main/java/com/capitalone/dashboard/model/TeamInventory.java
!????? src/main/java/com/capitalone/dashboard/model/CodeQualityMetric.java
!????? src/main/java/com/capitalone/dashboard/model/ScopeOwnerCollectorItem.java
!????? src/main/java/com/capitalone/dashboard/model/TestCase.java
!????? src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatDisposition.java
!????? src/main/java/com/capitalone/dashboard/model/ArtifactIdentifier.java
!????? src/main/java/com/capitalone/dashboard/model/FeatureStatus.java
AL src/main/java/com/capitalone/dashboard/model/Feature.java
!????? src/main/java/com/capitalone/dashboard/model/package-info.java
!????? src/main/java/com/capitalone/dashboard/model/NameValueCount.java
!????? src/main/java/com/capitalone/dashboard/model/FeatureHistory.java
!????? src/main/java/com/capitalone/dashboard/model/TestSuite.java
!????? src/main/java/com/capitalone/dashboard/model/FortifyScanReport.java
!????? src/main/java/com/capitalone/dashboard/request/CloudVirtualNetworkListRefreshRequest.java
!????? src/main/java/com/capitalone/dashboard/request/CodeQualityCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/GitRequestCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/DeployDataCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/TestDataCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/PerformanceCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/CloudInstanceCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/CloudSubnetListRefreshRequest.java
!????? src/main/java/com/capitalone/dashboard/request/CloudVolumeCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/GenericCollectorItemCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/CloudSubnetCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/PerfTestDataCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/BinaryArtifactCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/ConfigurationCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/Monitor2DataCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/CommitCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/request/CloudInstanceListRefreshRequest.java
!????? src/main/java/com/capitalone/dashboard/request/CloudVolumeListRefreshRequest.java
!????? src/main/java/com/capitalone/dashboard/request/BuildDataCreateRequest.java
!????? src/main/java/com/capitalone/dashboard/event/DashboardEventListener.java
!????? src/main/java/com/capitalone/dashboard/event/HygieiaMongoEventListener.java
!????? src/main/java/com/capitalone/dashboard/event/CodeQualityEventListener.java
!????? src/main/java/com/capitalone/dashboard/event/BuildEventListener.java
!????? src/main/java/com/capitalone/dashboard/event/RelatedCollectorItemEventListener.java
!????? src/main/java/com/capitalone/dashboard/event/EnvironmentComponentEventListener.java
!????? src/main/java/com/capitalone/dashboard/event/sync/SyncException.java
!????? src/main/java/com/capitalone/dashboard/event/sync/SyncDashboard.java
!????? src/main/java/com/capitalone/dashboard/event/TestResultEventListener.java
!????? src/main/java/com/capitalone/dashboard/event/CommitEventListener.java
!????? src/main/java/com/capitalone/dashboard/testutil/FongoConfig.java
!????? src/main/java/com/capitalone/dashboard/testutil/TestRestOperations.java
!????? src/main/java/com/capitalone/dashboard/testutil/TestRestTemplate.java
!????? src/main/java/com/capitalone/dashboard/testutil/GsonUtil.java
!????? src/main/java/com/capitalone/dashboard/testutil/BaseCollectorTestConfig.java
!????? src/main/java/com/capitalone/dashboard/testutil/TestResponse.java
!????? src/main/java/com/capitalone/dashboard/client/RestAuthType.java
!????? src/main/java/com/capitalone/dashboard/client/RestUserInfo.java
!????? src/main/java/com/capitalone/dashboard/client/RestClient.java
*****************************************************
Printing headers for text files without a valid license header...
=====================================================
== File: MAINTAINERS
=====================================================
amitmawkin
tabladrum
mrpudn
satishc1
=====================================================
== File: README.md
=====================================================
The README is in the [gh-pages](https://github.com/capitalone/Hygieia/blob/gh-pages/pages/hygieia/core/core.md) branch. Please update it there.
=====================================================
== File: site-content/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.capitalone.dashboard</groupId>
<artifactId>core</artifactId>
<packaging>jar</packaging>
<version>3.1.1-SNAPSHOT</version>
<name>${project.groupId}:${project.artifactId}</name>
<description>Core package shared by API layer and Microservices</description>
<url>https://github.com/capitalone/Hygieia</url>
<properties>
<guava.version>16.0.1</guava.version>
<hamcrest.version>1.3</hamcrest.version>
<jacoco.version>0.7.6.201602180812</jacoco.version>
<joda-time.version>2.7</joda-time.version>
<joda-convert.version>1.8.1</joda-convert.version>
<jackson.version>2.5.0</jackson.version>
<junit.version>4.11</junit.version>
<mongo>3.0.2</mongo>
<mongodb.version>3.0.2</mongodb.version>
<pmd.version>3.6</pmd.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.1.7.RELEASE</spring.version>
<spring.data.version>1.8.0.RELEASE</spring.data.version>
<spring-data-releasetrain.version>Gosling-RELEASE</spring-data-releasetrain.version>
<spring.version>4.2.5.RELEASE</spring.version>
<spring.cloud.version>1.3.1.RELEASE</spring.cloud.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
</parent>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<build>
<plugins>
=====================================================
== File: site-content/pmd.xml
=====================================================
<?xml version="1.0"?>
<ruleset name="Custom ruleset"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>
Exclude noisy rules.
</description>
<rule ref="rulesets/internal/all-java.xml">
<exclude name="AbstractNaming"/>
<exclude name="AddEmptyString"/>
<exclude name="AppendCharacterWithChar"/>
<exclude name="ArrayIsStoredDirectly"/>
<exclude name="AssignmentInOperand"/>
<exclude name="AtLeastOneConstructor"/>
<exclude name="AvoidCatchingGenericException"/>
<exclude name="AvoidDuplicateLiterals"/>
<exclude name="AvoidFieldNameMatchingMethodName"/>
<exclude name="AvoidFinalLocalVariable"/>
<exclude name="AvoidInstantiatingObjectsInLoops"/>
<exclude name="AvoidLiteralsInIfCondition"/>
<exclude name="AvoidPrefixingMethodParameters"/>
<exclude name="AvoidSynchronizedAtMethodLevel"/>
<exclude name="AvoidThrowingNullPointerException"/>
<exclude name="AvoidThrowingRawExceptionTypes"/>
<exclude name="AvoidUsingShortType"/>
<exclude name="BeanMembersShouldSerialize"/>
<exclude name="CallSuperInConstructor"/>
<exclude name="CommentRequired"/>
<exclude name="CommentSize"/>
<exclude name="CompareObjectsWithEquals"/>
<exclude name="ConfusingTernary"/>
<exclude name="CyclomaticComplexity"/>
<exclude name="DataflowAnomalyAnalysis"/>
<exclude name="DefaultPackage"/>
<exclude name="DoNotUseThreads"/>
<exclude name="DuplicateImports"/>
<exclude name="EmptyMethodInAbstractClassShouldBeAbstract"/>
<exclude name="ExcessiveImports"/>
<exclude name="ExcessivePublicCount"/>
<exclude name="FieldDeclarationsShouldBeAtStartOfClass"/>
<exclude name="ForLoopsMustUseBraces"/>
<exclude name="GodClass"/>
<exclude name="GuardDebugLogging"/>
<exclude name="GuardLogStatement"/>
<exclude name="GuardLogStatementJavaUtil"/>
<exclude name="IfStmtsMustUseBraces"/>
<exclude name="ImmutableField"/>
=====================================================
== File: site-content/MAINTAINERS
=====================================================
amitmawkin
tabladrum
mrpudn
satishc1
=====================================================
== File: site-content/README.md
=====================================================
The README is in the [gh-pages](https://github.com/capitalone/Hygieia/blob/gh-pages/pages/hygieia/core/core.md) branch. Please update it there.
=====================================================
== File: site-content/travis-utilities/release.sh
=====================================================
#!/bin/bash
cp travis-utilities/.travis.settings.xml $HOME/.m2/settings.xml
openssl aes-256-cbc -K $encrypted_00b218189f3e_key -iv $encrypted_00b218189f3e_iv -in travis-utilities/keys.gpg.enc -out keys.gpg -d
gpg --fast-import keys.gpg
shred keys.gpg
sed -i 's|-SNAPSHOT||g' pom.xml
mvn deploy -q -P release
=====================================================
== File: site-content/travis-utilities/deploy-snapshot.sh
=====================================================
#!/bin/bash
cp travis-utilities/.travis.settings.xml $HOME/.m2/settings.xml
mvn deploy -q
=====================================================
== File: site-content/travis-utilities/.travis.settings.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>ossrh</id>
<username>${env.OSSRH_USERNAME}</username>
<password>${env.OSSRH_PASSWORD}</password>
</server>
</servers>
<profiles>
<profile>
<id>release</id>
<properties>
<gpg.keyname>${env.GPG_KEYNAME}</gpg.keyname>
<gpg.passphrase>${env.GPG_PASSPHRASE}</gpg.passphrase>
</properties>
</profile>
</profiles>
</settings>
=====================================================
== File: site-content/checkstyle.xml
=====================================================
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<module name="Checker">
<!-- Checks that a package-info.java file exists for each package. -->
<!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage -->
<!--
<module name="JavadocPackage">
<property name="allowLegacy" value="true"/>
</module>
-->
<!-- Checks whether files end with a new line. -->
<!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
<module name="NewlineAtEndOfFile"/>
<!-- Checks that property files contain the same keys. -->
<!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
<module name="Translation"/>
<!-- Checks for Size Violations. -->
<!-- See http://checkstyle.sf.net/config_sizes.html -->
<module name="FileLength"/>
<!-- Checks for whitespace -->
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
<module name="FileTabCharacter"/>
<!-- Miscellaneous other checks. -->
<!-- See http://checkstyle.sf.net/config_misc.html -->
<!--
<module name="RegexpSingleline">
<property name="format" value="\s+$"/>
<property name="minimum" value="0"/>
<property name="maximum" value="0"/>
<property name="message" value="Line has trailing spaces."/>
<property name="severity" value="info"/>
</module>
-->
<module name="TreeWalker">
<!-- Checks for Javadoc comments. -->
<!-- See http://checkstyle.sf.net/config_javadoc.html -->
<!--
<module name="JavadocMethod">
<property name="scope" value="package"/>
=====================================================
== File: site-content/create_collector.md
=====================================================
Create New Collector
==================================================
Copy skeleton collector project
--------------------------------------
Copy the sample collector project into a new directory in the collectors folder and give it a name to match the collector
you are building (eg pivotalTracker). In the pom.xml file, change the artifactId, name and optionally the groupId elements, like so:
<project>
<groupId>com.capitalone.dashboard</groupId>
<artifactId>pivotal-tracker-collector</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>Pivotal Tracker Collector</name>
...
</project>
The pom file includes all of the dependencies you will need to interact with the Dashboard Application MongoDB instance,
such as Model classes and Repositories.
Extending Collector
--------------------------------------
If you need to store extra configuration for your collector, you can create a class that extends Collector and add new
fields to store configuration information that is specific to your collector.
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
/**
* Collect Features from PivotalTracker
*/
public class PivotalTrackerCollector extends Collector {
private String apiToken;
public String getApiToken() {
return apiToken;
}
public void setApiToken(String apiToken) {
this.apiToken = apiToken;
}
}
If you decide to take this approach, you will also need to create a Spring Data repository interface that extends from
BaseCollectorRepository.
package com.capitalone.dashboard.repository;
=====================================================
== File: site-content/.travis.yml
=====================================================
language: java
jdk:
- openjdk8
branches:
only:
- master
- gerrit-integration
- "/^v[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+.*$/"
cache:
directories:
- "$TRAVIS_BUILD_DIR/UI/node_modules"
install: true
before_script:
- sudo chown -R $USER:$GROUP $TRAVIS_BUILD_DIR
script:
- if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then mvn clean install -q; fi
- if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then cp ./travis-utilities/deploy-snapshot.sh . && ./deploy-snapshot.sh; fi
- if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [[ "$TRAVIS_BRANCH" =~ ^v[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+.*$ ]]; then cp ./travis-utilities/release.sh . && ./release.sh; fi
notifications:
webhooks:
urls: https://webhooks.gitter.im/e/48597b0f75dd571734bc
on_success: always
on_failure: always
on_start: always
email:
recipients:
- tapabrata.pal@capitalone.com
- nireesh.thiruveedula@capitalone.com
- Stephen.Hughes@capitalone.com
- Prashant.Parekh@capitalone.com
- Matthew.Beasley@capitalone.com
- Subodh.Battina@capitalone.com
- Ragha.Vema@capitalone.com
on_success: always
on_failure: always
=====================================================
== File: site-content/src/test/resources/artifacts/artifacts.json
=====================================================
[{
"id": "56ccb7a57fab7c3eac031aac",
"_class": "com.capitalone.dashboard.model.BinaryArtifact",
"timestamp": 1456256819843,
"artifactName": "api.jar",
"canonicalName": "api-1.0.0.0.jar",
"artifactGroupId": "com.lightningcd.api",
"artifactVersion": "1.0.0.0",
"buildInfo": {
"id": "5ba51c320be2d3f98f795044",
"_class": "com.capitalone.dashboard.model.Build",
"collectorItemId": "5ba136220be2d32568777fa5",
"timestamp": 1537547314372,
"number": "148",
"buildUrl": "http://localhost:8082/job/c1usercheck/148/",
"startTime": 1537547300387,
"endTime": 1537547314338,
"duration": 13951,
"buildStatus": "Success",
"codeRepos": [
{
"url": "https://mygithub.com/myOrg/myRepo",
"branch": "refs/remotes/origin/master",
"type": "GIT"
}
],
"sourceChangeSet": []
}
}
]
=====================================================
== File: site-content/src/test/resources/collectors/coll.json
=====================================================
[
{
"id" : "5ba136220be2d32568777fa4",
"_class" : "com.capitalone.dashboard.model.Collector",
"name" : "Hudson",
"collectorType" : "Build",
"enabled" : true,
"online" : true,
"errors" : [],
"uniqueFields" : {
"jobName" : "",
"jobUrl" : ""
},
"allFields" : {
"jobName" : "",
"jobUrl" : "",
"instanceUrl" : ""
},
"lastExecuted" : 1537838340823,
"searchFields" : [
"options.jobName",
"niceName"
]
},
{
"id" : "5ba136290be2d32568777fa8",
"_class" : "com.capitalone.dashboard.model.Collector",
"name" : "Sonar",
"collectorType" : "CodeQuality",
"enabled" : true,
"online" : true,
"errors" : [],
"uniqueFields" : {},
"allFields" : {},
"lastExecuted" : 1537838341109,
"searchFields" : [
"description"
]
},
{
"id" : "5ba155280be2d339d2f2461e",
"_class" : "com.capitalone.dashboard.model.Collector",
"name" : "Product",
"collectorType" : "Product",
"enabled" : true,
"online" : true,
"errors" : [],
"uniqueFields" : {},
"allFields" : {},
"lastExecuted" : 0,
=====================================================
== File: site-content/src/test/resources/component/component.json
=====================================================
[
{
"id": "5ba155820be2d339d2f24626",
"_class": "com.capitalone.dashboard.model.Component",
"name": "Testing",
"collectorItems": {
"SCM": [
{
"id": "5ba16a200be2d349ddf7fc80",
"enabled": true,
"errors": [],
"pushed": false,
"collectorId": "5ba16a0b0be2d34a64291205",
"lastUpdated": 0,
"options": {
"password": "",
"personalAccessToken": "",
"branch": "master",
"userID": "",
"url": "https://mygithub.com/myOrg/myRepo"
}
}
],
"Build": [
{
"id": "5ba136220be2d32568777fa5",
"description": "job/c1usercheck/",
"niceName": "TopoJenkins",
"enabled": false,
"errors": [],
"pushed": true,
"collectorId": "5ba136220be2d32568777fa4",
"lastUpdated": 1537305331713,
"options": {
"jobName": "job/c1usercheck/",
"jobUrl": "http://localhost:8082/job/c1usercheck/",
"instanceUrl": "http://localhost:8082/"
}
}
],
"CodeQuality": [
{
"id": "5ba136290be2d32568777fa9",
"description": "C1 Custom Env Var Inject",
"niceName": "TopoJenkins",
"enabled": false,
"errors": [],
"pushed": true,
"collectorId": "5ba136290be2d32568777fa8",
"lastUpdated": 1537305335290,
=====================================================
== File: site-content/src/test/resources/builds/builds.json
=====================================================
[
{
"id": "5ba51c320be2d3f98f795044",
"_class": "com.capitalone.dashboard.model.Build",
"collectorItemId": "5ba136220be2d32568777fa5",
"timestamp": 1537547314372,
"number": "148",
"buildUrl": "http://localhost:8082/job/c1usercheck/148/",
"startTime": 1537547300387,
"endTime": 1537547314338,
"duration": 13951,
"buildStatus": "Success",
"codeRepos": [
{
"url": "https://mygithub.com/myOrg/myRepo",
"branch": "refs/remotes/origin/master",
"type": "GIT"
}
],
"sourceChangeSet": []
},
{
"id": "5ba51d120be2d3f98f79504c",
"_class": "com.capitalone.dashboard.model.Build",
"collectorItemId": "5ba136220be2d32568777fa5",
"timestamp": 1537547538123,
"number": "149",
"buildUrl": "http://localhost:8082/job/c1usercheck/149/",
"startTime": 1537547525358,
"endTime": 1537547538098,
"duration": 12740,
"buildStatus": "Success",
"codeRepos": [
{
"url": "https://mygithub.com/myOrg/myRepo",
"branch": "refs/remotes/origin/master",
"type": "GIT"
}
],
"sourceChangeSet": []
},
{
"id": "5ba520c40be2d3f98f795054",
"_class": "com.capitalone.dashboard.model.Build",
"collectorItemId": "5ba136220be2d32568777fa5",
"timestamp": 1537548484349,
"number": "150",
"buildUrl": "http://localhost:8082/job/c1usercheck/150/",
"startTime": 1537548473383,
"endTime": 1537548484312,
=====================================================
== File: site-content/src/test/resources/librarypolicy/librarypolicy.json
=====================================================
[{
"id": "5ad626cfc23b392c8f61ea1b",
"_class": "com.capitalone.dashboard.model.LibraryPolicyResult",
"collectorItemId": "5ad5f605c23b391cfa1c01a4",
"timestamp": 1523984079768,
"evaluationTimestamp": 1522879797193,
"threats": {
"License": [
{
"level": "Medium",
"components": [
"com.amazonaws:aws-java-sdk-sqs-1.11.28.jar",
"ch.qos.logback:logback-classic-1.1.11.jar",
"ch.qos.logback:logback-core-1.1.11.jar",
"junit:junit-4.11.jar",
"highcharts:highcharts-3d-4.2.1.js",
"highcharts:highcharts-4.2.1.js",
"net.masterthought:cucumber-reporting-2.0.0.jar"
],
"count": 7
},
{
"level": "None",
"components": [
"org.springframework:spring-test-4.3.10.RELEASE.jar",
"org.jsoup:jsoup-1.8.3.jar",
"com.amazonaws:jmespath-java-1.0.jar",
"org.springframework.retry:spring-retry-1.2.1.RELEASE.jar",
"com.amazonaws:aws-java-sdk-kms-1.11.28.jar",
"com.fasterxml.jackson.core:jackson-core-2.8.9.jar",
"org.springframework.batch:spring-batch-infrastructure-3.0.8.RELEASE.jar",
"com.fasterxml.jackson.core:jackson-annotations-2.8.0.jar",
"com.google.code.gson:gson-2.8.1.jar",
"org.slf4j:slf4j-api-1.7.25.jar",
"org.springframework.boot:spring-boot-test-autoconfigure-1.5.6.RELEASE.jar",
"com.vaadin.external.google:android-json-0.0.20131108.vaadin1.jar",
"com.jayway.jsonpath:json-path-2.2.0.jar",
"org.springframework.batch:spring-batch-core-3.0.8.RELEASE.jar",
"org.apache.logging.log4j:log4j-api-2.7.jar",
"org.apache.httpcomponents:httpclient-4.5.3.jar",
"org.springframework.boot:spring-boot-starter-logging-1.5.6.RELEASE.jar",
"org.assertj:assertj-core-2.6.0.jar",
"org.slf4j:jul-to-slf4j-1.7.25.jar",
"jquery:jquery-1.12.1.min.js",
":aws-temporary-credentials-provider-2.1.3.jar",
"com.fasterxml.jackson.core:jackson-databind-2.8.9.jar",
"org.springframework:spring-beans-4.3.10.RELEASE.jar",
"org.apache.velocity:velocity-1.7.jar",
"org.springframework.boot:spring-boot-starter-test-1.5.6.RELEASE.jar",
"commons-logging:commons-logging-1.1.3.jar",
=====================================================
== File: site-content/src/test/resources/dashboard/dashboard.json
=====================================================
[
{
"id": "5ba155820be2d339d2f24627",
"_class": "com.capitalone.dashboard.model.Dashboard",
"template": "widgets",
"title": "TestPlugin",
"widgets": [
{
"id": "5ba16a200be2d349ddf7fc82",
"name": "repo",
"componentId": "5ba155820be2d339d2f24626",
"options": {
"password": "",
"id": "repo0",
"personalAccessToken": "",
"branch": "master",
"userID": "",
"url": "https://mygithub.com/myOrg/myRepo"
}
},
{
"id": "5ba16af70be2d34a77757045",
"name": "build",
"componentId": "5ba155820be2d339d2f24626",
"options": {
"buildDurationThreshold": 3,
"id": "build0",
"consecutiveFailureThreshold": 5
}
},
{
"id": "5ba16b060be2d34a77757048",
"name": "codeanalysis",
"componentId": "5ba155820be2d339d2f24626",
"options": {
"id": "codeanalysis0"
}
}
],
"owners": [
{
"username": "topo",
"authType": "STANDARD"
}
],
"type": "Team",
"application": {
"name": "Testing",
"components": [
{
=====================================================
== File: site-content/src/test/resources/codequality/codequality.json
=====================================================
[
{
"id": "5ba950da0be2d3128858d322",
"_class": "com.capitalone.dashboard.model.CodeQuality",
"collectorItemId": "5ba136290be2d32568777fa9",
"timestamp": 1537822938615,
"name": "C1 Custom Env Var Inject",
"url": "http://localhost:9000/dashboard/index/org.jenkins-ci.plugins:CustomC1EnvVarInject",
"type": "StaticAnalysis",
"version": "1.0.0-SNAPSHOT",
"buildId": "5ba51c320be2d3f98f795044",
"metrics": [
{
"name": "coverage",
"value": "0.0",
"formattedValue": "0.0%"
},
{
"name": "new_vulnerabilities",
"value": "",
"formattedValue": ""
},
{
"name": "violations",
"value": "28",
"formattedValue": "28"
},
{
"name": "quality_gate_details",
"value": "{\"level\":\"ERROR\",\"conditions\":[{\"metric\":\"new_security_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"new_reliability_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"new_maintainability_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"coverage\",\"op\":\"LT\",\"warning\":\"\",\"error\":\"80\",\"actual\":\"0.0\",\"level\":\"ERROR\"}]}",
"formattedValue": "{\"level\":\"ERROR\",\"conditions\":[{\"metric\":\"new_security_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"new_reliability_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"new_maintainability_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"coverage\",\"op\":\"LT\",\"warning\":\"\",\"error\":\"80\",\"actual\":\"0.0\",\"level\":\"ERROR\"}]}%"
},
{
"name": "sqale_index",
"value": "203",
"formattedValue": "3h 23min"
},
{
"name": "critical_violations",
"value": "1",
"formattedValue": "1"
},
{
"name": "blocker_violations",
"value": "0",
"formattedValue": "0"
},
{
"name": "new_major_violations",
"value": "",
=====================================================
== File: site-content/src/test/resources/test_results/test_results.json
=====================================================
[
{
"id" : "5803cd02edb9650aa33d205a",
"collectorItemId" : "57f2a0193b55670a9e06d63a",
"timestamp" : 1476644087024,
"executionId" : "94",
"buildId" : "5803cd02edb9650aa33d2059",
"description" : " TEST-UI",
"url" : "https://myjenkins.com/myjenkins/job/TEST-UI/",
"startTime" : 1476643852954,
"endTime" : 1476644086910,
"duration" : 233956,
"failureCount" : 0,
"successCount" : 1,
"skippedCount" : 0,
"totalCount" : 1,
"unknownStatusCount" : 0,
"type" : "Functional",
"targetAppName" : " -UI-SLATE",
"targetEnvName" : "QAMB",
"testCapabilities" : [
{
"timestamp" : 0,
"executionId" : "94",
"description" : "/json",
"startTime" : 0,
"endTime" : 0,
"duration" : 161998,
"failedTestSuiteCount" : 0,
"successTestSuiteCount" : 1,
"skippedTestSuiteCount" : 0,
"totalTestSuiteCount" : 1,
"unknownStatusTestSuiteCount" : 0,
"status" : "Success",
"type" : "Functional",
"testSuites" : [
{
"id" : "validate-auto-loan-account-details",
"description" : "Feature:Validate Auto Loan Account Details",
"type" : "Functional",
"startTime" : 0,
"endTime" : 0,
"duration" : 161998,
"totalTestCaseCount" : 2,
"failedTestCaseCount" : 0,
"successTestCaseCount" : 2,
"skippedTestCaseCount" : 0,
"unknownStatusCount" : 0,
"status" : "Success",
=====================================================
== File: site-content/src/test/resources/collector_items/items.json
=====================================================
[
{
"id": "5ba136220be2d32568777fa5",
"_class": "com.capitalone.dashboard.model.CollectorItem",
"description": "job/c1usercheck/",
"niceName": "TopoJenkins",
"enabled": false,
"errors": [],
"pushed": true,
"collectorId": "5ba136220be2d32568777fa4",
"lastUpdated": 1537548484342,
"options": {
"jobName": "job/c1usercheck/",
"jobUrl": "http://localhost:8082/job/c1usercheck/",
"instanceUrl": "http://localhost:8082/"
}
},
{
"id": "5ba136220be2d32568777fa6",
"_class": "com.capitalone.dashboard.model.CollectorItem",
"description": "job/c1usercheck2/",
"niceName": "TopoJenkins",
"enabled": false,
"errors": [],
"pushed": true,
"collectorId": "5ba136220be2d32568777fa4",
"lastUpdated": 1537548484342,
"options": {
"jobName": "job/c1usercheck2/",
"jobUrl": "http://localhost:8082/job/c1usercheck2/",
"instanceUrl": "http://localhost:8082/"
}
},
{
"id": "5ba136290be2d32568777fa9",
"_class": "com.capitalone.dashboard.model.CollectorItem",
"description": "C1 Custom Env Var Inject",
"niceName": "TopoJenkins",
"enabled": false,
"errors": [],
"pushed": true,
"collectorId": "5ba136290be2d32568777fa8",
"lastUpdated": 1537548487364,
"options": {
"projectName": "C1 Custom Env Var Inject",
"projectId": "AWUfseU7tTiUsfWMVoi8",
"instanceUrl": "http://localhost:9000"
}
},
{
=====================================================
== File: site-content/src/test/resources/securityscan/securityscan.json
=====================================================
[
{
"_id": "5ac4f4e95470fb75445daaf6",
"collectorItemId": "5b4e524333ec296b81c3935f",
"timestamp": 1522855896054,
"type": "SecurityAnalysis",
"metrics": [
{
"name": "Score",
"value": "89",
"formattedValue": "89"
},
{
"name": "Low",
"value": "1",
"formattedValue": "1",
"status": "Ok"
},
{
"name": "Medium",
"value": "4",
"formattedValue": "4",
"status": "Warning"
},
{
"name": "Critical",
"value": "3",
"formattedValue": "3",
"status": "Alert"
},
{
"name": "High",
"value": "21",
"formattedValue": "21",
"status": "Alert"
}
]
}
]
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/FongoBaseRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import org.junit.Rule;
import org.junit.runner.RunWith;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.github.fakemongo.junit.FongoRule;
@ContextConfiguration(classes = { FongoConfig.class })
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext
public abstract class FongoBaseRepositoryTest {
@Rule
public FongoRule fongoRule = new FongoRule();
}
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/CollectorTaskTests.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.collector.CollectorTask;
import com.capitalone.dashboard.model.Collector;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class CollectorTaskTests {
@Mock private TaskScheduler taskScheduler;
@Mock private BaseCollectorRepository<Collector> baseCollectorRepository;
private CollectorTask<Collector> task;
private static final String COLLECTOR_NAME = "Test Collector";
@Before
public void init() {
task = new TestCollectorTask();
}
@Test
public void run_collectorNotRegistered_savesNewCollector() {
Collector c = new Collector();
when(baseCollectorRepository.findByName(COLLECTOR_NAME)).thenReturn(null);
when(baseCollectorRepository.save(any(Collector.class))).thenReturn(c);
task.run();
verify(baseCollectorRepository).save(any(Collector.class));
}
@Test
public void run_enabled() {
Collector c = new Collector();
c.setEnabled(true);
long prevLastExecuted = c.getLastExecuted();
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/CollectorItemRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.testutil.FongoConfig;
import com.capitalone.dashboard.util.LoadTestData;
import com.github.fakemongo.junit.FongoRule;
import com.google.common.collect.Lists;
import org.bson.types.ObjectId;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {FongoConfig.class})
@DirtiesContext
public class CollectorItemRepositoryTest {
@Rule
public FongoRule fongoRule = new FongoRule();
@Autowired
private CollectorItemRepository collectorItemRepository;
@Test
public void findAllByOptionNameValueAndCollectorIdsInReturns0() throws IOException {
collectorItemRepository.deleteAll();
LoadTestData.loadCollectorItems(collectorItemRepository);
Iterable<CollectorItem> items = collectorItemRepository.findAllByOptionNameValueAndCollectorIdsIn("jobName", "job/", Collections.singletonList(new ObjectId("5ba136220be2d32568777fa4")));
List<CollectorItem> itemList = Lists.newArrayList(items);
assertEquals(itemList.size(),0);
}
@Test
public void findAllByOptionNameValueAndCollectorIdsInReturns1() throws IOException {
collectorItemRepository.deleteAll();
LoadTestData.loadCollectorItems(collectorItemRepository);
Iterable<CollectorItem> items = collectorItemRepository.findAllByOptionNameValueAndCollectorIdsIn("jobName", "job/c1usercheck/", Collections.singletonList(new ObjectId("5ba136220be2d32568777fa4")));
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/FongoConfig.java
=====================================================
package com.capitalone.dashboard.repository;
import org.springframework.context.annotation.Bean;
import com.capitalone.dashboard.config.MongoConfig;
import com.github.fakemongo.Fongo;
import com.mongodb.MongoClient;
public class FongoConfig extends MongoConfig {
@Override
@Bean
public MongoClient mongo() throws Exception {
return new Fongo(getDatabaseName()).getMongo();
}
@Override
protected String getDatabaseName() {
return "test-db";
}
}
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/TemplateRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Template;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class TemplateRepositoryTest extends FongoBaseRepositoryTest {
private static Template mockTemplate;
@Autowired
private TemplateRepository templateRepository;
@Before
public void setUp() {
mockTemplate = new Template("template1", getWidgetsAndOrder(), getWidgetsAndOrder());
}
@After
public void tearDown() {
mockTemplate = null;
templateRepository.deleteAll();
}
@Test
public void validate_save() {
templateRepository.save(mockTemplate);
assertTrue(
"Happy-path MongoDB connectivity validation for the FeatureRepository has failed",
templateRepository.findAll().iterator().hasNext());
}
@Test
public void validate_get() {
templateRepository.save(mockTemplate);
Template actual = templateRepository.findByTemplate("template1");
assertEquals(actual.getTemplate(), mockTemplate.getTemplate());
}
@Test
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/AuthenticationRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Field;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import com.capitalone.dashboard.model.Authentication;
public class AuthenticationRepositoryTest extends FongoBaseRepositoryTest {
private static int testNumber = 0;
private static String username ;
@Before
public void updateUsername(){
username = "usernameTest" + testNumber;
testNumber++;
}
@Autowired
private AuthenticationRepository authenticationRepository;
/*
* This test checks that adding a duplicate username will create an exception
*/
@Test(expected=DuplicateKeyException.class)
public void createDuplicateUserTest() {
String username = "username";
Authentication user1 = new Authentication(username, "pass1");
authenticationRepository.save(user1);
Authentication user2 = new Authentication(username, "pass2");
// This line should throw a DuplicateKeyException
authenticationRepository.save(user2);
}
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/FeatureRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.capitalone.dashboard.model.Feature;
public class FeatureRepositoryTest extends FongoBaseRepositoryTest {
private static Feature mockV1Feature;
private static Feature mockJiraFeature;
private static Feature mockJiraFeature2;
private static Feature mockJiraFeature3;
private static Feature mockJiraFeature4;
private static final String generalUseDate = "2015-11-01T00:00:00Z";
private static final String generalUseDate2 = "2015-12-01T00:00:00Z";
private static final String generalUseDate3 = "2015-12-15T00:00:00Z";
private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
private static Calendar cal = Calendar.getInstance();
private static final String maxDateWinner = df.format(new Date());
private static String maxDateLoser = new String();
private static String currentSprintEndDate = new String();
private static final ObjectId jiraCollectorId = new ObjectId();
// private static final ObjectId v1CollectorId = new ObjectId();
@Autowired
private FeatureRepository featureRepo;
@Before
public void setUp() {
// Date-time modifications
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1);
maxDateLoser = df.format(cal.getTime());
cal.add(Calendar.DAY_OF_YEAR, +13);
currentSprintEndDate = df.format(cal.getTime());
// Helper mock data
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/ScopeOwnerRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.ScopeOwnerCollectorItem;
public class ScopeOwnerRepositoryTest extends FongoBaseRepositoryTest {
private static ScopeOwnerCollectorItem mockV1ScopeOwner;
private static ScopeOwnerCollectorItem mockJiraScopeOwner;
private static ScopeOwnerCollectorItem mockJiraScopeOwner2;
private static CollectorItem mockBadItem;
private static final String generalUseDate = "2015-11-01T00:00:00Z";
private static final String olderThanGeneralUseDate = "2015-10-30T00:00:00Z";
private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
private static Calendar cal = Calendar.getInstance();
private static final String maxDateWinner = df.format(new Date());
private static String maxDateLoser = new String();
private static final ObjectId jiraCollectorId = new ObjectId();
private static final ObjectId v1CollectorId = new ObjectId();
@Autowired
private ScopeOwnerRepository scopeOwnerRepo;
@Autowired
private CollectorItemRepository badItemRepo;
@Before
public void setUp() {
// Date-time modifications
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1);
maxDateLoser = df.format(cal.getTime());
// VersionOne Mock Scope
mockV1ScopeOwner = new ScopeOwnerCollectorItem();
mockV1ScopeOwner.setCollectorId(v1CollectorId);
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.testutil.FongoConfig;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
import java.util.Objects;
import static org.junit.Assert.*;
public class RelatedCollectorItemRepositoryTest extends FongoBaseRepositoryTest {
@Autowired
private RelatedCollectorItemRepository relatedCollectorItemRepository;
@Test
public void saveRelatedItems() {
relatedCollectorItemRepository.deleteAll();
ObjectId left = ObjectId.get();
ObjectId right = ObjectId.get();
relatedCollectorItemRepository.saveRelatedItems(left, right, "some source", "some reason");
List<RelatedCollectorItem> relatedCollectorItemList = Lists.newArrayList(relatedCollectorItemRepository.findAll());
assertFalse(CollectionUtils.isEmpty(relatedCollectorItemList));
assertEquals(1, relatedCollectorItemList.size());
assertEquals(relatedCollectorItemList.get(0).getLeft(), left);
assertEquals(relatedCollectorItemList.get(0).getRight(), right);
assertTrue(relatedCollectorItemList.get(0).getReason().equalsIgnoreCase("some reason"));
assertTrue(relatedCollectorItemList.get(0).getSource().equalsIgnoreCase("some source"));
}
@Test
public void saveRelatedItemsDuplicate() {
relatedCollectorItemRepository.deleteAll();
ObjectId left = ObjectId.get();
ObjectId right = ObjectId.get();
RelatedCollectorItem rc = new RelatedCollectorItem();
rc.setLeft(left);
rc.setRight(right);
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/DashboardCreateTests.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.*;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class DashboardCreateTests extends FongoBaseRepositoryTest {
@Autowired
private DashboardRepository dashboardRepository;
@Autowired
private ComponentRepository componentRepository;
@Autowired
private CmdbRepository cmdbRepository;
@Test
public void createTeamDashboardTest() {
Component component = new Component("Jay's component");
component.setOwner("Jay");
component = componentRepository.save(component);
System.out.println(component.getId());
Cmdb configItemApp = new Cmdb();
configItemApp.setConfigurationItem("ASVTEST");
configItemApp = cmdbRepository.save(configItemApp);
Cmdb configItemComp = new Cmdb();
configItemComp.setConfigurationItem("BAPTEST");
configItemComp = cmdbRepository.save(configItemComp);
Application application = new Application("Jay's App", component);
List<String> activeWidgets = new ArrayList<>();
List<Owner> owners = new ArrayList<Owner>();
owners.add(new Owner("owner", AuthType.STANDARD));
Dashboard dashboard = new Dashboard("Topo", "Jays's Dashboard", application, owners, DashboardType.Team, configItemApp.getConfigurationItem(), configItemComp.getConfigurationItem(), activeWidgets, false, ScoreDisplayType.HEADER);
Widget build = new Widget();
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/TeamRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.Team;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class TeamRepositoryTest extends FongoBaseRepositoryTest {
private static Team mockV1Team;
private static Team mockJiraTeam;
private static Team mockJiraTeam2;
private static CollectorItem mockBadItem;
private static final String generalUseDate = "2015-11-01T00:00:00Z";
private static final String olderThanGeneralUseDate = "2015-10-30T00:00:00Z";
private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
private static Calendar cal = Calendar.getInstance();
private static final String maxDateWinner = df.format(new Date());
private static String maxDateLoser = new String();
private static final ObjectId jiraCollectorId = new ObjectId();
private static final ObjectId v1CollectorId = new ObjectId();
@Autowired
private TeamRepository teamRepo;
@Autowired
private CollectorItemRepository badItemRepo;
@Before
public void setUp() {
// Date-time modifications
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1);
maxDateLoser = df.format(cal.getTime());
// VersionOne Mock Scope
mockV1Team = new Team("", "");
mockV1Team.setCollectorId(v1CollectorId);
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/repository/ScopeRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.capitalone.dashboard.model.Scope;
public class ScopeRepositoryTest extends FongoBaseRepositoryTest {
private static Scope mockV1Scope;
private static Scope mockJiraScope;
private static Scope mockJiraScope2;
private static final String generalUseDate = "2015-11-01T00:00:00Z";
private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
private static Calendar cal = Calendar.getInstance();
private static final String maxDateWinner = df.format(new Date());
private static String maxDateLoser = new String();
private static String currentScopeEndDate = new String();
private static final ObjectId jiraCollectorId = new ObjectId();
private static final ObjectId v1CollectorId = new ObjectId();
@Autowired
private ScopeRepository scopeRepo;
@Before
public void setUp() {
// Date-time modifications
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1);
maxDateLoser = df.format(cal.getTime());
cal.add(Calendar.DAY_OF_YEAR, +13);
currentScopeEndDate = df.format(cal.getTime());
// VersionOne Mock Scope
mockV1Scope = new Scope();
mockV1Scope.setCollectorId(v1CollectorId);
mockV1Scope.setIsDeleted("False");
mockV1Scope.setChangeDate(maxDateLoser);
mockV1Scope.setAssetState("Active");
mockV1Scope.setBeginDate(maxDateLoser);
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/util/HygieiaUtilsTest.java
=====================================================
package com.capitalone.dashboard.util;
import org.junit.Assert;
import org.junit.Test;
public class HygieiaUtilsTest {
@Test
public void checkForEmptyStringValuesTest() {
boolean result = HygieiaUtils.checkForEmptyStringValues("", "test1", "test2");
Assert.assertTrue(result);
result = HygieiaUtils.checkForEmptyStringValues("test0", "test1", "test2");
Assert.assertFalse(result);
}
}
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/util/TestUtils.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.BinaryArtifact;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.BuildStatus;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.CommitType;
import com.capitalone.dashboard.model.EnvironmentStage;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineCommit;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.RepoBranch;
import com.capitalone.dashboard.model.SCM;
import org.bson.types.ObjectId;
import org.junit.Ignore;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Created by syq410 on 2/23/17.
*/
@Ignore
public class TestUtils {
private static final ObjectId DASHBOARD_ID = new ObjectId();
public static Commit createCommit(String revisionNumber,String scmUrl) {
Commit commit = new Commit();
commit.setScmRevisionNumber(revisionNumber);
commit.setCollectorItemId(ObjectId.get());
commit.setType(CommitType.New);
commit.setScmUrl(scmUrl);
return commit;
}
public static Pipeline getPipeline(ObjectId collectorItemId) {
Pipeline pipeline = new Pipeline();
pipeline.addCommit(PipelineStage.COMMIT.getName(), createPipelineCommit("scmRev3"));
EnvironmentStage environmentStage = new EnvironmentStage();
environmentStage.setLastArtifact(getBinaryArtifact());
pipeline.getEnvironmentStageMap().put("DEV",environmentStage);
Set<Build> failedBuilds = new HashSet<>();
Build failedBuild = createBuild();
failedBuild.setCollectorItemId(collectorItemId);
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/util/EncryptionTests.java
=====================================================
package com.capitalone.dashboard.util;
import org.junit.Test;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
public class EncryptionTests {
private final String THING_TO_BE_ENCRYPTED = "AKIAJ24MI4VLOIR72NVA";
private final String A_GOOD_STRING_KEY = "5XBoZ7li2W5wzhOULEqtQzdkufjsVFs4";
private final String A_LONG_KEY = "0ED1C7B771C9BBAB2583C364AFE8FB0C2F23A6FC8157EE3601ABB53D9CEA9893";
private final String A_SHORT_KEY = "F55CC56E8DB6056EB4085263";
private final String A_BAD_STRING_KEY = "c/t/nuBFwTgvB+lwzS/q5W0ZkQhhxCB1";
private static final String ALGO = "DESede";
private static final SecretKey GOOD_KEY = getKey();
private static final SecretKey BAD_KEY = getKey();
private static SecretKey getKey() {
SecretKey key = null;
try {
key = KeyGenerator.getInstance(ALGO).generateKey();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// String stringKey = Base64.encodeBase64String(key.getEncoded());
return key;
}
@Test
public void testGetStringKey() {
String key = null;
try {
key = Encryption.getStringKey();
} catch (EncryptionException e) {
e.printStackTrace();
}
assertNotEquals(null, key);
assertNotEquals("", key);
}
@Test
public void testGetSecretKey() {
SecretKey key = null;
try {
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/util/PipelineUtilsTest.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.*;
import com.capitalone.dashboard.repository.CommitRepository;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.capitalone.dashboard.util.TestUtils.createBuild;
import static com.capitalone.dashboard.util.TestUtils.createCommit;
import static com.capitalone.dashboard.util.TestUtils.getPipeline;
import static com.capitalone.dashboard.util.TestUtils.getScm;
import static org.junit.Assert.assertEquals;
/**
* Created by syq410 on 2/23/17.
*/
@RunWith(MockitoJUnitRunner.class)
public class PipelineUtilsTest {
private static final ObjectId DASHBOARD_ID = new ObjectId();
@Mock
private CommitRepository commitRepository;
@Test
public void testOrderForStages() {
Map<String, String> ordermap = PipelineUtils.getOrderForStages(setupDashboard());
assertEquals(ordermap.get("0"), "Commit");
assertEquals(ordermap.get("1"), "Build");
assertEquals(ordermap.get("2"), "dev");
assertEquals(ordermap.get("3"), "qa");
assertEquals(ordermap.get("4"), "int");
}
private Dashboard setupDashboard() {
ObjectId configItemAppId = new ObjectId();
ObjectId configItemComponetId = new ObjectId();
List<String> activeWidgets = new ArrayList<>();
List<Owner> owners = new ArrayList<Owner>();
owners.add(new Owner("owner", AuthType.STANDARD));
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/util/DashboardUtilsTest.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.FongoBaseRepositoryTest;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Arrays;
import java.util.Set;
import static org.junit.Assert.*;
public class DashboardUtilsTest extends FongoBaseRepositoryTest{
@Autowired
private ComponentRepository componentRepository;
@Autowired
private CollectorRepository collectorRepository;
@Autowired
private CollectorItemRepository collectorItemRepository;
@Test
public void getUniqueCollectorItemIDsFromAllComponents() throws Exception {
Component component1 = getComponent("TestComponent1");
Collector collector1 = getCollector("TestCollector1",CollectorType.Build);
CollectorItem collectorItem1 = getCollectorItem("TestCollectorItem1",collector1);
component1.addCollectorItem(collector1.getCollectorType(), collectorItem1);
Collector collector11 = getCollector("TestCollector1",CollectorType.SCM);
CollectorItem collectorItem11 = getCollectorItem("TestCollectorItem11",collector11);
component1.addCollectorItem(collector11.getCollectorType(), collectorItem11);
Component component2 = getComponent("TestComponent2");
CollectorItem collectorItem2 = getCollectorItem("TestCollectorItem2",collector11);
component2.addCollectorItem(collector11.getCollectorType(), collectorItem2);
Component component3 = getComponent("TestComponent2");
component3.addCollectorItem(collector11.getCollectorType(), collectorItem2);
componentRepository.save(Arrays.asList(component1,component2,component3));
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/util/LoadTestData.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.LibraryPolicyResult;
import com.capitalone.dashboard.model.TestResult;
import com.capitalone.dashboard.repository.BuildRepository;
import com.capitalone.dashboard.repository.CodeQualityRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.LibraryPolicyResultsRepository;
import com.capitalone.dashboard.repository.TestResultRepository;
import com.capitalone.dashboard.testutil.GsonUtil;
import com.google.common.io.Resources;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.util.List;
public class LoadTestData {
public static void loadDashBoard(DashboardRepository dashboardRepository) throws IOException {
Gson gson = GsonUtil.getGson();
String json = IOUtils.toString(Resources.getResource("./dashboard/dashboard.json"));
List<Dashboard> dashboards = gson.fromJson(json, new TypeToken<List<Dashboard>>(){}.getType());
dashboardRepository.save(dashboards);
}
public static void loadCollector (CollectorRepository collectorRepository) throws IOException {
Gson gson = GsonUtil.getGson();
String json = IOUtils.toString(Resources.getResource("./collectors/coll.json"));
List<Collector> collector = gson.fromJson(json, new TypeToken<List<Collector>>(){}.getType());
collectorRepository.save(collector);
}
public static void loadComponent(ComponentRepository componentRepository) throws IOException {
Gson gson = GsonUtil.getGson();
String json = IOUtils.toString(Resources.getResource("./component/component.json"));
List<Component> components = gson.fromJson(json, new TypeToken<List<Component>>(){}.getType());
componentRepository.save(components);
}
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/util/GitBranchSpecTest.java
=====================================================
package com.capitalone.dashboard.util;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class GitBranchSpecTest {
@Test
public void testMatch() {
GitBranchSpec l = new GitBranchSpec("master");
assertTrue(l.matches("origin/master"));
assertFalse(l.matches("origin/something/master"));
assertTrue(l.matches("master"));
assertFalse(l.matches("dev"));
GitBranchSpec est = new GitBranchSpec("origin/*/dev");
assertFalse(est.matches("origintestdev"));
assertTrue(est.matches("origin/test/dev"));
assertFalse(est.matches("origin/test/release"));
assertFalse(est.matches("origin/test/somthing/release"));
GitBranchSpec s = new GitBranchSpec("origin/*");
assertTrue(s.matches("origin/master"));
GitBranchSpec m = new GitBranchSpec("**/magnayn/*");
assertTrue(m.matches("origin/magnayn/b1"));
assertTrue(m.matches("remote/origin/magnayn/b1"));
assertTrue(m.matches("remotes/origin/magnayn/b1"));
GitBranchSpec n = new GitBranchSpec("*/my.branch/*");
assertTrue(n.matches("origin/my.branch/b1"));
assertFalse(n.matches("origin/my-branch/b1"));
assertFalse(n.matches("remote/origin/my.branch/b1"));
assertTrue(n.matches("remotes/origin/my.branch/b1"));
GitBranchSpec o = new GitBranchSpec("**");
assertTrue(o.matches("origin/my.branch/b1"));
assertTrue(o.matches("origin/my-branch/b1"));
assertTrue(o.matches("remote/origin/my.branch/b1"));
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskTwoWithGenericItem.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.GenericCollectorItem;
import com.capitalone.dashboard.repository.BaseCollectorRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.GenericCollectorItemRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class TestCollectorTaskTwoWithGenericItem extends CollectorTaskWithGenericItem<Collector> {
private final CollectorRepository collectorRepository;
@Autowired
public TestCollectorTaskTwoWithGenericItem(TaskScheduler taskScheduler, CollectorItemRepository collectorItemRepository, GenericCollectorItemRepository genericCollectorItemRepository, RelatedCollectorItemRepository relatedCollectorItemRepository,
CollectorRepository collectorRepository) {
super(taskScheduler, "MyTool", collectorItemRepository, genericCollectorItemRepository, relatedCollectorItemRepository);
this.collectorRepository = collectorRepository;
}
@Override
public Map<String, Object> getGenericCollectorItemOptions(String serverUrl, GenericCollectorItem genericCollectorItem) {
Map<String, Object> options = new HashMap<>();
options.put("projectName", "C1 Custom Env Var Inject");
options.put("instanceUrl", "http://localhost:9000");
return options;
}
@Override
public Collector getCollector() {
Collector collector = new Collector();
collector.setId(new ObjectId("5ba136290be2d32568777fa8"));
collector.setName("MyTool");
return collector;
}
@Override
public BaseCollectorRepository<Collector> getCollectorRepository() {
return collectorRepository;
}
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/collector/CollectorTaskTest.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.repository.*;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.scheduling.TaskScheduler;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class CollectorTaskTest {
@Mock private TaskScheduler taskScheduler;
private static final String COLLECTOR_NAME = "Test Collector";
private CollectorTask<Collector> collector;
@Before
public void init() {
collector = new CollectorTaskTest.TestCollectorTask();
}
@Test
public void throttleRequestsTest_ratelimit_exceeded() {
long startTime = System.currentTimeMillis() - 500;
int requestCount = 5;
long waitTime = 500;
int requestRateLimit = 3;
long requestRateLimitTimeWindow = 1000;
CollectorTask<Collector> collectorSpy = Mockito.spy(collector);
boolean result = collectorSpy.throttleRequests(startTime, requestCount,
waitTime, requestRateLimit,
requestRateLimitTimeWindow);
assertEquals(true, result);
verify(collectorSpy, times(1)).sleep(Mockito.anyLong());
}
@Test
public void throttleRequestsTest_ratelimit_not_exceeded() {
long startTime = System.currentTimeMillis() - 500;
int requestCount = 2;
long waitTime = 500;
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItemTest.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.GenericCollectorItem;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.GenericCollectorItemRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import com.capitalone.dashboard.testutil.BaseCollectorTestConfig;
import com.capitalone.dashboard.testutil.FongoConfig;
import com.capitalone.dashboard.util.LoadTestData;
import com.github.fakemongo.junit.FongoRule;
import com.google.common.collect.Lists;
import org.bson.types.ObjectId;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {FongoConfig.class, BaseCollectorTestConfig.class})
public class CollectorTaskWithGenericItemTest {
@Rule
public FongoRule fongoRule = new FongoRule();
@Autowired
private CollectorItemRepository collectorItemRepository;
@Autowired
private GenericCollectorItemRepository genericCollectorItemRepository;
@Autowired
RelatedCollectorItemRepository relatedCollectorItemRepository;
@Autowired
TestCollectorTaskWithGenericItem testCollectorTaskWithGenericItem;
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskWithGenericItem.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.GenericCollectorItem;
import com.capitalone.dashboard.repository.BaseCollectorRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.GenericCollectorItemRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class TestCollectorTaskWithGenericItem extends CollectorTaskWithGenericItem<Collector> {
private final CollectorRepository collectorRepository;
@Autowired
public TestCollectorTaskWithGenericItem(TaskScheduler taskScheduler, CollectorItemRepository collectorItemRepository, GenericCollectorItemRepository genericCollectorItemRepository, RelatedCollectorItemRepository relatedCollectorItemRepository,
CollectorRepository collectorRepository) {
super(taskScheduler, "Sonar", collectorItemRepository, genericCollectorItemRepository, relatedCollectorItemRepository);
this.collectorRepository = collectorRepository;
}
@Override
public Map<String, Object> getGenericCollectorItemOptions(String serverUrl, GenericCollectorItem genericCollectorItem) {
Map<String, Object> options = new HashMap<>();
options.put("projectName", "C1 Custom Env Var Inject");
options.put("instanceUrl", "http://localhost:9000");
return options;
}
@Override
public Collector getCollector() {
Collector collector = new Collector();
collector.setId(new ObjectId("5ba136290be2d32568777fa8"));
collector.setName("Sonar");
return collector;
}
@Override
public BaseCollectorRepository<Collector> getCollectorRepository() {
return collectorRepository;
}
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/model/DashboardTest.java
=====================================================
package com.capitalone.dashboard.model;
import com.capitalone.dashboard.util.PipelineUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
@RunWith(MockitoJUnitRunner.class)
public class DashboardTest {
@Test
public void findEnvironmentMappings(){
Dashboard dashboard = makeTeamDashboard("template", "title", "appName","" ,"ASVTEST","BAPTEST", "comp1", "comp2");
dashboard.getWidgets().add(makePipelineWidget("DEV", "QA", null, null, "PROD"));
Widget buildWidget = new Widget();
buildWidget.setName("build");
dashboard.getWidgets().add(buildWidget);
Widget commitWidget = new Widget();
commitWidget.setName("repo");
dashboard.getWidgets().add(commitWidget);
Map<PipelineStage, String> expected = new HashMap<>();
expected.put(PipelineStage.valueOf("COMMIT"), "Commit");
expected.put(PipelineStage.valueOf("BUILD"), "Build");
expected.put(PipelineStage.valueOf("DEV"), "DEV");
expected.put(PipelineStage.valueOf("QA"), "QA");
expected.put(PipelineStage.valueOf("PROD"), "PROD");
Map<PipelineStage, String> actual = PipelineUtils.getStageToEnvironmentNameMap(dashboard);
assertEquals(expected, actual);
}
@Test
public void findEnvironmentMappings_no_mappings_configured(){
Dashboard dashboard = makeTeamDashboard("template", "title", "appName","","ASVTEST", "BAPTEST","comp1", "comp2");
Map<PipelineStage, String> expected = new HashMap<>();
Map<PipelineStage, String> actual = PipelineUtils.getStageToEnvironmentNameMap(dashboard);
assertEquals(expected, actual);
}
private Dashboard makeTeamDashboard(String template, String title, String appName, String owner, String configItemAppName, String configItemComponentName, String... compNames) {
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/model/LibraryPolicyResultTest.java
=====================================================
package com.capitalone.dashboard.model;
import org.junit.Test;
import java.util.Objects;
import java.util.Set;
import static org.junit.Assert.*;
public class LibraryPolicyResultTest {
@Test
public void addThreat() {
LibraryPolicyResult result = new LibraryPolicyResult();
result.addThreat(LibraryPolicyType.License, LibraryPolicyThreatLevel.Critical, LibraryPolicyThreatDisposition.Open, "component1");
assertEquals(result.getThreats().size(), 1);
assertEquals(result.getThreats().keySet().size(), 1);
assertEquals(result.getThreats().values().size(), 1);
assertEquals(result.getThreats().keySet().iterator().next(), LibraryPolicyType.License);
Set<LibraryPolicyResult.Threat> threats = result.getThreats().get(LibraryPolicyType.License);
LibraryPolicyResult.Threat threat = threats.iterator().next();
assertEquals(threat.getCount(), 1);
assertEquals(threat.getLevel(), LibraryPolicyThreatLevel.Critical);
assertEquals(threat.getComponents().iterator().next(), "component1##Open");
assertEquals(threat.getDispositionCounts().size(), 1);
assertEquals(threat.getDispositionCounts().get(LibraryPolicyThreatDisposition.Open).intValue(), 1);
result.addThreat(LibraryPolicyType.License, LibraryPolicyThreatLevel.Critical, LibraryPolicyThreatDisposition.Open, "component2");
assertEquals(result.getThreats().size(), 1);
assertEquals(result.getThreats().keySet().size(), 1);
assertEquals(result.getThreats().values().size(), 1);
assertEquals(result.getThreats().keySet().iterator().next(), LibraryPolicyType.License);
threats = result.getThreats().get(LibraryPolicyType.License);
assertEquals(threats.size(), 1);
threat = threats.iterator().next();
assertEquals(threat.getCount(), 2);
assertEquals(threat.getLevel(), LibraryPolicyThreatLevel.Critical);
assertTrue(threat.getComponents().contains( "component1##Open"));
assertTrue(threat.getComponents().contains( "component2##Open"));
assertEquals(threat.getDispositionCounts().size(), 1);
assertEquals(threat.getDispositionCounts().get(LibraryPolicyThreatDisposition.Open).intValue(), 2);
result.addThreat(LibraryPolicyType.License, LibraryPolicyThreatLevel.Critical, LibraryPolicyThreatDisposition.Closed, "component3");
assertEquals(result.getThreats().size(), 1);
assertEquals(result.getThreats().keySet().size(), 1);
assertEquals(result.getThreats().values().size(), 1);
assertEquals(result.getThreats().keySet().iterator().next(), LibraryPolicyType.License);
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/model/StandardWidgetTest.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.junit.Test;
import java.util.Objects;
import static org.junit.Assert.*;
public class StandardWidgetTest {
@Test
public void getOptions() {
}
@Test
public void testStandardwidget() {
StandardWidget sw = new StandardWidget(CollectorType.Build, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("build"));
assertTrue(Objects.equals(sw.getOptions().get("id"), "build0"));
assertTrue(sw.getWidget().getName().equalsIgnoreCase("build"));
assertTrue(Objects.equals(sw.getWidget().getOptions().get("id"), "build0"));
sw = new StandardWidget(CollectorType.SCM, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("repo"));
assertTrue(Objects.equals(sw.getOptions().get("id"), "repo0"));
assertTrue(sw.getWidget().getName().equalsIgnoreCase("repo"));
assertTrue(Objects.equals(sw.getWidget().getOptions().get("id"), "repo0"));
sw = new StandardWidget(CollectorType.CodeQuality, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getOptions().get("id"), "codeanalysis0"));
assertTrue(sw.getWidget().getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getWidget().getOptions().get("id"), "codeanalysis0"));
sw = new StandardWidget(CollectorType.Test, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getOptions().get("id"), "codeanalysis0"));
assertTrue(sw.getWidget().getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getWidget().getOptions().get("id"), "codeanalysis0"));
sw = new StandardWidget(CollectorType.StaticSecurityScan, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getOptions().get("id"), "codeanalysis0"));
assertTrue(sw.getWidget().getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getWidget().getOptions().get("id"), "codeanalysis0"));
sw = new StandardWidget(CollectorType.LibraryPolicy, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("codeanalysis"));
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/model/ComponentTest.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ComponentTest {
@Test
public void testGetLastUpdatedCollectorItemForType() {
Component component = new Component();
List<CollectorItem> cItems = new ArrayList<>();
cItems.add(makeCollectorItem(1537476665987L));
cItems.add(makeCollectorItem(0));
cItems.add(makeCollectorItem(1537471111111L));
cItems.add(makeCollectorItem(1537472222222L));
cItems.add(makeCollectorItem(1537473333333L));
component.getCollectorItems().put(CollectorType.SCM, cItems);
CollectorItem c = component.getLastUpdatedCollectorItemForType(CollectorType.SCM);
Assert.assertArrayEquals(new long[]{1537476665987L}, new long[]{c.getLastUpdated()});
}
@Test
public void testGetLastUpdatedCollectorItemForTypeForOneItem() {
Component component = new Component();
List<CollectorItem> cItems = new ArrayList<>();
cItems.add(makeCollectorItem(1537473333333L));
component.getCollectorItems().put(CollectorType.SCM, cItems);
CollectorItem c = component.getLastUpdatedCollectorItemForType(CollectorType.SCM);
Assert.assertArrayEquals(new long[]{1537473333333L}, new long[]{c.getLastUpdated()});
}
@Test
public void testGetLastUpdatedCollectorItemForTypeForZero() {
Component component = new Component();
List<CollectorItem> cItems = new ArrayList<>();
cItems.add(makeCollectorItem(1537473333333L));
cItems.add(makeCollectorItem(0));
component.getCollectorItems().put(CollectorType.SCM, cItems);
CollectorItem c = component.getLastUpdatedCollectorItemForType(CollectorType.SCM);
Assert.assertArrayEquals(new long[]{1537473333333L}, new long[]{c.getLastUpdated()});
}
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/event/EnvironmentComponentEventListenerTest.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.Application;
import com.capitalone.dashboard.model.AuthType;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.BinaryArtifact;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.DashboardType;
import com.capitalone.dashboard.model.EnvironmentComponent;
import com.capitalone.dashboard.model.EnvironmentStage;
import com.capitalone.dashboard.model.Owner;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.ScoreDisplayType;
import com.capitalone.dashboard.repository.BinaryArtifactRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.CommitRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.capitalone.dashboard.util.TestUtils.createBuild;
import static com.capitalone.dashboard.util.TestUtils.createCommit;
import static com.capitalone.dashboard.util.TestUtils.createPipelineCommit;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class EnvironmentComponentEventListenerTest {
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/event/TestResultEventListenerTest.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.TestResult;
import com.capitalone.dashboard.model.TestCapability;
import com.capitalone.dashboard.model.TestSuiteType;
import com.capitalone.dashboard.model.TestCase;
import com.capitalone.dashboard.model.TestCaseStatus;
import com.capitalone.dashboard.model.TestCaseStep;
import com.capitalone.dashboard.model.TestSuite;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Performance;
import com.capitalone.dashboard.model.PerformanceType;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.PerformanceRepository;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class TestResultEventListenerTest {
@Mock
private CollectorRepository collectorRepository;
@Mock
private CollectorItemRepository collectorItemRepository;
@Mock
private PerformanceRepository performanceRepository;
@InjectMocks
private TestResultEventListener testResultEventListener;
private static final String COLLECTOR_NAME = "PerfTools";
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/event/CommitEventListenerTest.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.Application;
import com.capitalone.dashboard.model.AuthType;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.CommitType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.DashboardType;
import com.capitalone.dashboard.model.Owner;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.ScoreDisplayType;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class CommitEventListenerTest {
@Mock
private ComponentRepository componentRepository;
@Mock
private DashboardRepository dashboardRepository;
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/event/BuildEventListenerTest.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.event.sync.SyncDashboard;
import com.capitalone.dashboard.model.Application;
import com.capitalone.dashboard.model.AuthType;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.DashboardType;
import com.capitalone.dashboard.model.EnvironmentStage;
import com.capitalone.dashboard.model.Owner;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.ScoreDisplayType;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.CommitRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.capitalone.dashboard.util.TestUtils.createBuild;
import static com.capitalone.dashboard.util.TestUtils.createCommit;
import static com.capitalone.dashboard.util.TestUtils.createPipelineCommit;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class BuildEventListenerTest {
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/event/sync/SyncDashboardTest.java
=====================================================
package com.capitalone.dashboard.event.sync;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.Widget;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.repository.BuildRepository;
import com.capitalone.dashboard.repository.CodeQualityRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.LibraryPolicyResultsRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import com.capitalone.dashboard.repository.TestResultRepository;
import com.capitalone.dashboard.testutil.FongoConfig;
import com.capitalone.dashboard.util.LoadTestData;
import com.github.fakemongo.junit.FongoRule;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.collections4.CollectionUtils;
import org.bson.types.ObjectId;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {FongoConfig.class})
@DirtiesContext
public class SyncDashboardTest {
=====================================================
== File: site-content/src/test/java/com/capitalone/dashboard/MarkdownTest.java
=====================================================
package com.capitalone.dashboard;
import com.google.common.base.Predicate;
import com.google.common.io.Files;
import org.junit.Before;
import org.junit.Test;
import org.junit.Ignore;
import javax.annotation.Nullable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.regex.Pattern;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class MarkdownTest {
private Pattern absoluteLinkPattern = Pattern.compile(".*github.com/capitalone/Hygieia.*", Pattern.DOTALL);
private File root;
@Before
public void before(){
root = getProjectRoot();
}
@Test
public void licenseInRoot(){
File license = new File(root, "LICENSE");
assertTrue(license.exists());
license = null;
}
private static final Predicate<File> MARK_DOWN_PREDICATE = new Predicate<File>() {
@Override
public boolean apply(@Nullable File file) {
return file != null && file.getName().endsWith(".md");
}
};
//TODO: Review: disabled so we can explain how to setup a test example pointing to the Hygieia github, not sure this is really necessary.
@Ignore
@Test
public void noAbsoluteLinksInMarkdown() throws Exception {
=====================================================
== File: site-content/src/main/resources/logback.xml
=====================================================
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
<logger name="com.mongodb.FongoDBCollection" level="INFO"/>
<logger name="com.github.fakemongo.impl.ExpressionParser" level="INFO"/>
</configuration>
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/misc/HygieiaException.java
=====================================================
package com.capitalone.dashboard.misc;
public class HygieiaException extends Exception {
private static final long serialVersionUID = 4596406816345733781L;
public static final int NOTHING_TO_UPDATE = 0;
public static final int JSON_FORMAT_ERROR = -1;
public static final int COLLECTOR_CREATE_ERROR = -10;
public static final int COLLECTOR_ITEM_CREATE_ERROR = -11;
public static final int ERROR_INSERTING_DATA = -12;
public static final int DUPLICATE_DATA = -13;
public static final int BAD_DATA = -14;
public static final int API_RATE_LIMIT_ERROR = -15;
public static final int INVALID_CONFIGURATION = -999;
private int errorCode = 0;
public HygieiaException(String message, int errorCode) {
super(message);
this.errorCode = errorCode;
}
public HygieiaException(String message, Throwable cause, int errorCode) {
super(message, cause);
this.errorCode = errorCode;
}
public HygieiaException(Throwable cause) {
super(cause);
}
public HygieiaException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public int getErrorCode() {
return errorCode;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/AuditResultRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.AuditResult;
import com.capitalone.dashboard.model.AuditType;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface AuditResultRepository extends PagingAndSortingRepository<AuditResult, ObjectId> {
AuditResult findById(ObjectId id);
Page<AuditResult> findByAuditType(AuditType auditType, Pageable pageable);
Iterable<AuditResult> findByDashboardTitle(String dashboardTitle);
Iterable<AuditResult> findByDashboardTitleAndAuditType(String dashboardTitle, AuditType auditType);
Iterable<AuditResult> findByConfigItemBusServNameAndConfigItemBusAppName(String configItemBusServName, String configItemBusAppName);
Iterable<AuditResult> findByConfigItemBusServNameAndConfigItemBusAppNameAndAuditType(String configItemBusServName, String configItemBusAppName, AuditType auditType);
Page<AuditResult> findByLineOfBusiness(String lineOfBusiness, Pageable pageable);
Page<AuditResult> findByLineOfBusinessAndAuditType(String lineOfBusiness, AuditType auditType, Pageable pageable);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CollectorItemRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CollectorItem;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.types.path.PathBuilder;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* A {@link CollectorItem} repository
*/
public interface CollectorItemRepository extends BaseCollectorItemRepository<CollectorItem>, QueryDslPredicateExecutor<CollectorItem> {
//// FIXME: 1/20/16 I really hate this dashboard specific method in the collectoritem repository, should we move the dashboardcollectoritem repository into core?
@Query(value="{'options.dashboardId': ?1, 'collectorId': ?0 }")
CollectorItem findTeamDashboardCollectorItemsByCollectorIdAndDashboardId(ObjectId collectorId, String dashboardId);
@Query(value="{'options.applicationName' : ?1, 'collectorId' : ?0}")
List<CollectorItem> findByOptionsAndDeployedApplicationName(ObjectId collectorId, String applicationName);
// FIXME: 3/1/16 Really need to refactor this. Do not want collector specific lookups here.
@Query(value="{'options.jobName' : ?2, 'niceName' : ?1, 'collectorId' : ?0}")
CollectorItem findByCollectorIdNiceNameAndJobName(ObjectId collectorId, String niceName, String jobName);
@Query(value="{'options.projectId' : ?2, 'niceName' : ?1, 'collectorId' : ?0}")
CollectorItem findByCollectorIdNiceNameAndProjectId(ObjectId collectorId, String niceName, String projectId);
@Query(value="{ 'collectorId' : ?0, options.url : {$regex : '^?1$', $options: 'i'}, options.branch : {$regex : '^?2$', $options: 'i'}, enabled : ?3}")
CollectorItem findRepoByUrlAndBranch(ObjectId collectorId, String url, String branch, boolean enabled);
@Query(value="{ 'collectorId': { $in: ?0 }, ?1 : {$regex : '.*?2.*', $options: 'i'}}")
Page<CollectorItem> findByCollectorIdAndSearchField(List<ObjectId> collectorId, String searchField, String searchFieldValue, Pageable pageable);
@Query(value="{ 'collectorId': { $in: ?0 }, ?1 : {$regex : '.*?2.*', $options: 'i'} , ?3 : {$regex : '.*?4.*', $options: 'i'}}")
Page<CollectorItem> findByCollectorIdAndSearchFields(List<ObjectId> collectorId,String searchField1, String searchFieldValue1, String searchField2,String searchFieldValue2, Pageable pageable);
@Query(value="{'options.teamId' : ?0}")
CollectorItem findByJiraTeamId(String teamId);
@Query(value="{'options.projectId' : ?0}")
CollectorItem findByJiraProjectId(String projectId);
List<CollectorItem> findByDescription(String description);
default Iterable<CollectorItem> findAllByOptionNameValue(String optionName, String optionValue) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ChangeOrderRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.ChangeOrder;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
/**
* Repository for {@link ChangeOrder} data.
*/
public interface ChangeOrderRepository extends CrudRepository<ChangeOrder, ObjectId> {
ChangeOrder findByChangeID(String changeItem);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/RequestLogRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.RequestLog;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
public interface RequestLogRepository extends CrudRepository<RequestLog, ObjectId> {
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryCustom.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.Map;
import com.capitalone.dashboard.model.BinaryArtifact;
public interface BinaryArtifactRepositoryCustom {
String CANONICAL_NAME = "canonicalName";
String ARTIFACT_GROUP_ID = "artifactGroupId";
String ARTIFACT_MODULE = "artifactModule";
String ARTIFACT_VERSION = "artifactVersion";
String ARTIFACT_NAME = "artifactName";
String ARTIFACT_CLASSIFIER = "artifactClassifier";
String ARTIFACT_EXTENSION = "artifactExtension";
String BUILD_INFO_ID = "buildInfo.id";
Iterable<BinaryArtifact> findByAttributes(Map<String, Object> attributes);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/EnvironmentComponentRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.EnvironmentComponent;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* {@link EnvironmentComponent} repository.
*/
public interface EnvironmentComponentRepository extends CrudRepository<EnvironmentComponent, ObjectId> {
/**
* Finds the {@link EnvironmentComponent} collector item id, environment name and component name.
*
* @param collectorItemId collector item id
* @param environmentName environment name
* @param componentName component name
* @return a {@link EnvironmentComponent}
*/
@Query(value="{ collectorItemId : ?0, environmentName : ?1, componentName : ?2}")
EnvironmentComponent findComponent(ObjectId collectorItemId, String environmentName, String componentName);
/**
* Finds all {@link EnvironmentComponent}s for a given {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @return list of {@link EnvironmentComponent}
*/
List<EnvironmentComponent> findByCollectorItemId(ObjectId collectorItemId);
@Query(value="{ 'collectorItemId': {$in: ?0 }, 'deployed': true}")
List<EnvironmentComponent> findDeployedByCollectorItemIds(List<ObjectId> collectorItemIds);
@Query(value="{ 'collectorItemId': ?0, 'componentName': ?1, 'componentVersion': ?2, 'deployed':true}")
List<EnvironmentComponent> findDeployedByCollectorItemIdAndComponentNameAndComponentVersion(ObjectId dashboardCollectorItemId, String componentName, String componentVersion);
@Query(value="{ 'collectorItemId': ?0, 'componentName': ?1, 'componentVersion': ?2, 'deployTime':?3}")
EnvironmentComponent findByUniqueKey(ObjectId collectorItemId, String componentName, String componentVersion, long deployTime);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/GitHubRepoRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.webhook.github.GitHubRepo;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import java.util.List;
public interface GitHubRepoRepository extends BaseCollectorItemRepository<GitHubRepo>, QueryDslPredicateExecutor<GitHubRepo> {
@Query(value="{ 'collectorId' : ?0, options.url : ?1, options.branch : ?2}")
GitHubRepo findGitHubRepo(ObjectId collectorId, String url, String branch);
@Query(value="{ 'collectorId' : ?0, enabled: true}")
List<GitHubRepo> findEnabledGitHubRepos(ObjectId collectorId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/AuthenticationRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import org.bson.types.ObjectId;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.capitalone.dashboard.model.Authentication;
public interface AuthenticationRepository extends PagingAndSortingRepository<Authentication, ObjectId>{
Authentication findByUsername(String username);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/GenericCollectorItemRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.GenericCollectorItem;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Build} data.
*/
public interface GenericCollectorItemRepository extends CrudRepository<GenericCollectorItem, ObjectId>, QueryDslPredicateExecutor<GenericCollectorItem> {
List<GenericCollectorItem> findAllByToolName(String toolName);
List<GenericCollectorItem> findAllByRelatedCollectorItem (ObjectId relatedCollectorItemId);
GenericCollectorItem findByToolNameAndRawDataAndRelatedCollectorItem(String toolName, String rawData, ObjectId relatedCollectorItem);
List<GenericCollectorItem> findAllByToolNameAndProcessTimeEquals(String toolName, long processTime);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/RallyBurnDownRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.RallyBurnDownData;
public interface RallyBurnDownRepository extends CrudRepository<RallyBurnDownData, ObjectId>{
RallyBurnDownData findByIterationIdAndProjectId(String iterationId, String projectId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CloudVolumeRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CloudVolumeStorage;
import com.capitalone.dashboard.model.NameValue;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.Collection;
import java.util.List;
public interface CloudVolumeRepository extends
CrudRepository<CloudVolumeStorage, ObjectId>,
QueryDslPredicateExecutor<CloudVolumeStorage> {
@Query(value = "{ collectorItemId: ?0 }")
Collection<CloudVolumeStorage> findByCollectorItemId(ObjectId collectorItemId);
@Query(value = "{volumeId : ?0}")
CloudVolumeStorage findByVolumeId(String volumeId);
@Query(value = "{ tags: ?0 }")
Collection<CloudVolumeStorage> findByTags(List<NameValue> tags);
@Query(value = "{ 'tags.name' : ?0, 'tags.value' : ?1 }")
Collection<CloudVolumeStorage> findByTagNameAndValue(String name, String value);
Collection<CloudVolumeStorage> findByVolumeIdIn(List<String> volumeId);
Collection<CloudVolumeStorage> findByAttachInstancesIn(List<String> attachInstances);
@Query(value = "{accountNumber : ?0}")
Collection<CloudVolumeStorage> findByAccountNumber(String accountNumber);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/BuildRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.BuildStatus;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Build} data.
*/
public interface BuildRepository extends CrudRepository<Build, ObjectId>, QueryDslPredicateExecutor<Build> {
/**
* Finds the {@link Build} with the given number for a specific {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @param number buld number
* @return a {@link Build}
*/
Build findByCollectorItemIdAndNumber(ObjectId collectorItemId, String number);
@Query(value="{'sourceChangeSet.scmRevisionNumber' : {$exists: true, $in: ?0}, 'collectorItemId': { $in: ?1 }}")
List<Build> findBuildsForRevisionNumbersAndBuildCollectorItemIds(List<String> scmRevisionNumbers, List<ObjectId> buildCollectorItemId);
Build findTop1ByCollectorItemIdOrderByTimestampDesc(ObjectId collectorItemId);
Build findTop1ByCollectorItemIdAndBuildStatusOrderByTimestampDesc(ObjectId collectorItemId, BuildStatus buildStatus);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ApiTokenRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.ApiToken;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface ApiTokenRepository extends CrudRepository<ApiToken, ObjectId> {
ApiToken findByApiUserAndExpirationDt(String apiUser, Long expirationDt);
ApiToken findByApiUserAndApiKey(String apiUser, String apiKey);
List<ApiToken> findByApiUser(String apiUser);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQuery.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import org.bson.types.ObjectId;
import java.util.List;
import java.util.Map;
public interface CustomRepositoryQuery {
List<CollectorItem> findCollectorItemsBySubsetOptions(ObjectId id, Map<String, Object> allOptions, Map<String, Object> uniqueOptions,Map<String,Object> uniqueOptionsFromCollector);
List<Component> findComponents(Collector collector);
List<Component> findComponents(CollectorType collectorType);
List<Component> findComponents(Collector collector, CollectorItem collectorItem);
List<Component> findComponents(ObjectId collectorId, CollectorType collectorType, CollectorItem collectorItem);
List<Component> findComponents(ObjectId collectorId, CollectorType collectorType, ObjectId collectorItemId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CloudInstanceHistoryRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CloudInstanceHistory;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import java.util.Collection;
public interface CloudInstanceHistoryRepository extends
CrudRepository<CloudInstanceHistory, ObjectId> {
Collection<CloudInstanceHistory> findByAccountNumber(String accountNumber);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/FortifyScanRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.FortifyScanReport;
public interface FortifyScanRepository extends CrudRepository<FortifyScanReport, ObjectId>{
FortifyScanReport findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
List<FortifyScanReport> findByCollectorItemId(ObjectId id);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/IncidentRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Incident;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import java.util.List;
/**
* Repository for {@link Incident} data.
*/
public interface IncidentRepository extends MongoRepository<Incident, ObjectId> {
Incident findByIncidentID(String incidentID);
@Query("{ 'severity' : {$in : ?0} }")
List<Incident> findBySeverity(String[] severityValues);
@Query(value = "{'severity' : {$in : ?0}, 'openTime' : {$gt : ?1, $lt : ?2}}")
Page<Incident> findIncidentsBySeverityAndOpenTimeBetween (String[] severityValues, long startDate, long endDate, Pageable pageable);
@Query(value = "{'severity' : {$in : ?0}, 'openTime' : {$gt : ?1, $lt : ?2}}", count = true)
long countIncidentsBySeverityAndOpenTimeBetween (String[] severityValues, long startDate, long endDate);
@Query("{ 'collectorItemId' : {$in : ?0} }")
List<Incident> findByCollectorItemId(List<ObjectId> collectorItemIds);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/JobRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import com.capitalone.dashboard.model.JobCollectorItem;
public interface JobRepository<T extends JobCollectorItem> extends BaseCollectorItemRepository<T> {
@Query(value="{ 'collectorId' : ?0, options.instanceUrl : ?1, options.jobName : ?2}")
T findJob(ObjectId collectorId, String instanceUrl, String jobName);
@Query(value="{ 'collectorId' : ?0, options.jobUrl : ?1, options.jobName : ?2}")
T findJobByJobUrl(ObjectId collectorId, String jobUrl, String jobName);
@Query(value="{ 'collectorId' : ?0, options.instanceUrl : ?1, enabled: true}")
List<T> findEnabledJobs(ObjectId collectorId, String instanceUrl);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.BinaryArtifact;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface BinaryArtifactRepository extends CrudRepository<BinaryArtifact, ObjectId>, BinaryArtifactRepositoryCustom {
Iterable<BinaryArtifact> findByCollectorItemId(ObjectId collectorItemId);
@Query("{ 'collectorItemId': ?0, 'artifactGroupId' : ?1, 'artifactModule' : ?2, 'artifactVersion' : ?3, 'artifactName' : ?4, 'artifactClassifier' : ?5, 'artifactExtension' : ?6 }")
Iterable<BinaryArtifact> findByAttributes(Object collectorItemId, String artifactGroupId, String artifactModule, String artifactVersion, String artifactName, String artifactClassifier, String artifactExtension);
@Query("{ 'artifactGroupId' : ?0, 'artifactModule' : ?1, 'artifactVersion' : ?2, 'artifactName' : ?3, 'artifactClassifier' : ?4, 'artifactExtension' : ?5 }")
Iterable<BinaryArtifact> findByAttributes(String artifactGroupId, String artifactModule, String artifactVersion, String artifactName, String artifactClassifier, String artifactExtension);
Iterable<BinaryArtifact> findByBuildInfoId (ObjectId artifactBuildId);
Iterable<BinaryArtifact> findByArtifactNameAndTimestampGreaterThan(String artifactName, Long timestamp);
Iterable<BinaryArtifact> findByArtifactNameAndArtifactExtensionAndTimestampGreaterThan(String artifactName, String artifactExtension, Long timestamp);
@Query(value="{'metadata.buildUrl' : ?0}")
Iterable<BinaryArtifact> findByMetadataBuildUrl(String buildUrl);
List<BinaryArtifact> findByCollectorItemIdAndTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/LibraryPolicyResultsRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.model.LibraryPolicyResult;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link CodeQuality} data.
*/
public interface LibraryPolicyResultsRepository extends CrudRepository<LibraryPolicyResult, ObjectId>, QueryDslPredicateExecutor<LibraryPolicyResult> {
LibraryPolicyResult findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
LibraryPolicyResult findByCollectorItemId(ObjectId collectorItemId);
List<LibraryPolicyResult> findByCollectorItemIdAndTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
List<LibraryPolicyResult> findByCollectorItemIdAndEvaluationTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryImpl.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import com.capitalone.dashboard.model.BinaryArtifact;
public class BinaryArtifactRepositoryImpl implements BinaryArtifactRepositoryCustom {
@Autowired
MongoTemplate template;
@Override
public Iterable<BinaryArtifact> findByAttributes(Map<String, Object> attributes) {
Criteria c = null;
boolean first = true;
for (Map.Entry<String, Object> e : attributes.entrySet()) {
if (first) {
c = Criteria.where(e.getKey()).is(e.getValue());
} else {
c = c.and(e.getKey()).is(e.getValue());
}
first = false;
}
return template.find(new Query(c), BinaryArtifact.class);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ServiceAccountRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.ServiceAccount;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
public interface ServiceAccountRepository extends CrudRepository<ServiceAccount, ObjectId> {
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ScopeRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.Scope;
/**
* Repository for {@link Scope}.
*/
public interface ScopeRepository extends CrudRepository<Scope, ObjectId>,
QueryDslPredicateExecutor<Scope> {
/**
* This essentially returns the max change date from the collection, based
* on the last change date (or default delta change date property) available
*
* @param collectorId
* Collector ID of source system collector
* @param changeDate
* Last available change date or delta begin date property
* @return A single Change Date value that is the maximum value of the
* existing collection
*/
@Query
List<Scope> findTopByCollectorIdAndChangeDateGreaterThanOrderByChangeDateDesc(
ObjectId collectorId, String changeDate);
@Query(value = "{'pId' : ?0}", fields="{'pId' : 1}")
List<Scope> getScopeIdById(String pId);
@Query
List<Scope> findByOrderByProjectPathDesc();
@Query(value = "{'pId' : ?0 }")
List<Scope> getScopeById(String pId);
@Query(value = "{ 'collectorId' : ?0 }")
List<Scope> findByCollectorId(ObjectId collectorId);
Page<Scope> findAllByCollectorIdAndNameContainingIgnoreCase(ObjectId collectorId, String name, Pageable pageable);
Scope findByCollectorIdAndPId(ObjectId collectorId, String pId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ScoreCriteriaSettingsRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.score.ScoreMetric;
import com.capitalone.dashboard.model.score.ScoreValueType;
import com.capitalone.dashboard.model.score.settings.ScoreCriteriaSettings;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
/**
* Repository for {@link ScoreCriteriaSettings} data.
*/
public interface ScoreCriteriaSettingsRepository extends CrudRepository<ScoreCriteriaSettings, ObjectId>, QueryDslPredicateExecutor<ScoreMetric> {
/**
* Finds {@link ScoreCriteriaSettings}s for a given type {@link com.capitalone.dashboard.model.score.ScoreValueType}.
*
* @param type Score Value Type
* @return a {@link ScoreCriteriaSettings}
*/
ScoreCriteriaSettings findByType(ScoreValueType type);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CloudSubNetworkRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CloudInstance;
import com.capitalone.dashboard.model.CloudSubNetwork;
import com.capitalone.dashboard.model.NameValue;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.Collection;
import java.util.List;
public interface CloudSubNetworkRepository extends
CrudRepository<CloudSubNetwork, ObjectId>,
QueryDslPredicateExecutor<CloudInstance> {
@Query(value = "{ collectorItemId: ?0 }")
CloudSubNetwork findByCollectorItemId(ObjectId collectorItemId);
@Query(value= "{ tags: ?0 }")
Collection<CloudSubNetwork> findByTags(List<NameValue> tags);
@Query(value = "{subnetId : ?0}")
CloudSubNetwork findBySubnetId(String subnetId);
@Query(value = "{ 'tags.name' : ?0, 'tags.value' : ?1 }")
Collection<CloudSubNetwork> findByTagNameAndValue(String name, String value);
Collection<CloudSubNetwork> findBySubnetIdIn(List<String> subnetId);
Collection<CloudSubNetwork> findByAccountNumber(String accountNumber);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CollItemConfigHistoryRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CollectorItemConfigHistory;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface CollItemConfigHistoryRepository extends CrudRepository<CollectorItemConfigHistory, ObjectId> {
List<CollectorItemConfigHistory> findByCollectorItemIdAndTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
CollectorItemConfigHistory findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/BaseCollectorItemRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.capitalone.dashboard.model.CollectorItem;
/**
* Base {@link CollectorItem} repository that provides methods useful for any {@link CollectorItem}
* implementation.
*
* @param <T> Class that extends {@link CollectorItem}
*/
public interface BaseCollectorItemRepository<T extends CollectorItem> extends PagingAndSortingRepository<T, ObjectId> {
/**
* Finds all {@link CollectorItem}s that are enabled.
*
* @return list of {@link CollectorItem}s
*/
List<T> findByEnabledIsTrue();
/**
* Finds all {@link CollectorItem}s that match the provided id's.
*
* @param ids {@link Collection} of ids
* @return list of {@link CollectorItem}s
*/
List<T> findByCollectorIdIn(Collection<ObjectId> ids);
/**
* Finds paged results of {@link CollectorItem}s that match the provided id's.
*
* @param ids {@link Collection} of ids
* @param {@link org.springframework.data.domain.Pageable} object to determine which page to return
* @return page of {@link CollectorItem}s
*/
Page<T> findByCollectorIdInAndDescriptionContainingIgnoreCase(Collection<ObjectId> ids, String description, Pageable pageable);
/**
* Finds the {@link CollectorItem} for a given collector and options. This should represent a unique
* instance of a {@link CollectorItem} for a given {@link com.capitalone.dashboard.model.Collector}.
*
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/TeamRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Team;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Team}.
*/
public interface TeamRepository extends CrudRepository<Team, ObjectId>,
QueryDslPredicateExecutor<Team> {
Team findByTeamId(String teamId);
Team findByName(String name);
/**
* This essentially returns the max change date from the collection, based
* on the last change date (or default delta change date property) available
*
* @param collectorId
* Collector ID of source system collector
* @param changeDate
* Last available change date or delta begin date property
* @return A single Change Date value that is the maximum value of the
* existing collection
*/
@Query(value = "{ 'collectorId' : ?0, 'changeDate' : {$gt: ?1}, '_class' : 'com.capitalone.dashboard.model.Team', 'assetState': 'Active'}")
List<Team> findTopByChangeDateDesc(ObjectId collectorId, String changeDate);
@Query(value = "{ 'collectorId' : ?0 }")
List<Team> findByCollectorId(ObjectId collectorId);
Page<Team> findAllByCollectorIdAndNameContainingIgnoreCase(ObjectId collectorId, String name, Pageable pageable);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CodeQualityRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CodeQuality;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link CodeQuality} data.
*/
public interface CodeQualityRepository extends CrudRepository<CodeQuality, ObjectId>, QueryDslPredicateExecutor<CodeQuality> {
/**
* Finds the {@link CodeQuality} data point at the given timestamp for a specific
* {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @param timestamp timestamp
* @return a {@link CodeQuality}
*/
CodeQuality findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
List<CodeQuality> findByCollectorItemIdAndVersionOrderByTimestampDesc (ObjectId collectorItemId,String version);
List<CodeQuality> findByCollectorItemIdAndNameAndVersionOrderByTimestampDesc (ObjectId collectorItemId,String name,String version);
List<CodeQuality> findByCollectorItemIdOrderByTimestampDesc (ObjectId collectorItemId);
List<CodeQuality> findByNameAndVersion(String name,String version);
List<CodeQuality> findByNameAndVersionOrderByTimestampDesc(String name,String version);
List<CodeQuality> findByCollectorItemIdAndTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
CodeQuality findTop1ByCollectorItemIdOrderByTimestampDesc(ObjectId collectorItemId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryImpl.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import javax.xml.bind.DatatypeConverter;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.util.StringUtils;
import com.capitalone.dashboard.model.Feature;
import com.capitalone.dashboard.util.FeatureCollectorConstants;
/**
* Repository for {@link Feature} with custom methods implementation.
*/
public class FeatureRepositoryImpl implements FeatureRepositoryCustom {
@Autowired
private MongoOperations operations;
@Override
@SuppressWarnings("PMD.NPathComplexity")
public List<Feature> findByActiveEndingSprints(String sTeamId, String sProjectId, ObjectId collectorId, String currentISODateTime, boolean minimal) {
boolean dateTimeValid = true;
try {
DatatypeConverter.parseDateTime(currentISODateTime);
} catch (IllegalArgumentException e) {
// invalid datetime string
dateTimeValid = false;
}
String queryStr = dateTimeValid
? "{'isDeleted' : 'False', $and : [{'sSprintID' : {$ne : null}}, {'sSprintID' : {$ne : ''}}, {'sSprintAssetState': { $regex: '^active$', $options: 'i' }}, {'sSprintEndDate' : {$gte : '" + currentISODateTime + "'}}, {'sSprintEndDate' : {$lt : '9999-12-31T59:59:59.999999'}}] }, $orderby: { 'sStatus' :-1 }"
: "{'isDeleted' : 'False', $and : [{'sSprintID' : {$ne : null}}, {'sSprintID' : {$ne : ''}}, {'sSprintAssetState': { $regex: '^active$', $options: 'i' }}, {'sSprintEndDate' : {$lt : '9999-12-31T59:59:59.999999'}}] }, $orderby: { 'sStatus' :-1 }";
BasicQuery query = null;
if (minimal) {
query = new BasicQuery(queryStr,
"{'sStatus': 1, 'sNumber': 1, 'sName': 1, 'changeDate': 1, 'sUrl': 1, 'sSprintID': 1, 'sSprintName': 1, 'sSprintUrl': 1, 'sSprintBeginDate': 1, 'sSprintEndDate': 1, 'sEpicID' : 1,'sEpicNumber' : 1, 'sEpicName' : 1, 'sEpicUrl' : 1, 'sEstimate': 1, 'sEstimateTime': 1}");
} else {
query = new BasicQuery(queryStr);
}
if (collectorId != null) {
query.addCriteria(Criteria.where("collectorId").is(collectorId));
}
if (!StringUtils.isEmpty(sTeamId) && !FeatureCollectorConstants.TEAM_ID_ANY.equalsIgnoreCase(sTeamId)) {
query.addCriteria(Criteria.where("sTeamID").is(sTeamId));
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryCustom.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import com.capitalone.dashboard.model.Feature;
/**
* Repository for {@link FeatureCollector} with custom methods.
*/
public interface FeatureRepositoryCustom {
/**
* Find all features with active sprints that are between the provided date and that have an end date < 9999-12-31 EOD
*
* @param sTeamId
* @param sProjectId
* @param currentISODateTime
* @param minimal
* @return
*/
List<Feature> findByActiveEndingSprints(String sTeamId, String sProjectId, ObjectId collectorId, String currentISODateTime, boolean minimal);
/**
* Find all features that have sprints set but without an end date (or an end date >= 9999-12-31 EOD)
*
* @param sTeamId
* @param sProjectId
* @param minimal
* @return
*/
List<Feature> findByUnendingSprints(String sTeamId, String sProjectId, ObjectId collectorId, boolean minimal);
/**
* Find all features without sprints set
*
* @param sTeamId
* @param sProjectId
* @param minimal
* @return
*/
List<Feature> findByNullSprints(String sTeamId, String sProjectId, ObjectId collectorId, boolean minimal);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/DashboardRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.DashboardType;
import com.capitalone.dashboard.model.Owner;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.Collection;
import java.util.List;
/**
* {@link Dashboard} repository.
*/
public interface DashboardRepository extends PagingAndSortingRepository<Dashboard, ObjectId> {
List<Dashboard> findByOwner(String owner);
List<Dashboard> findByOwners(Owner owner);
List<Dashboard> findByOwnersAndTypeContainingIgnoreCase(Owner owner, String type);
List<Dashboard> findByTitle(String title);
Dashboard findByTitleAndType(String title, DashboardType type);
List<Dashboard> findByApplicationComponentsIn(Collection<Component> components);
@Query(value="{'application.components.$id': {$in : ?0 }}")
List<Dashboard> findByApplicationComponentIdsIn(Collection<ObjectId> componentIds);
@Query(value="{'type': {$in : [null, 'Team']}}")
List<Dashboard> findTeamDashboards();
@Query(value="{'widgets.options.teams.collectorItemId': ?0 }")
List<Dashboard> findProductDashboardsByTeamDashboardCollectorItemId(String teamDashboardCollectorItemId);
Iterable<Dashboard> findAllByConfigurationItemBusServName(String configurationItem);
Iterable<Dashboard> findAllByConfigurationItemBusAppName(String configurationItem);
Iterable<Dashboard> findAllByConfigurationItemBusServNameIn(List<String> configurationItemList);
Iterable<Dashboard> findAllByConfigurationItemBusServNameAndConfigurationItemBusAppName(String appName, String compName);
Dashboard findByConfigurationItemBusServNameIgnoreCaseAndConfigurationItemBusAppNameIgnoreCase(String appName, String compName);
List<Dashboard> findAllByTypeAndConfigurationItemBusServNameContainingIgnoreCase(DashboardType type, String appName);
List<Dashboard> findAllByConfigurationItemBusServNameContainingIgnoreCaseAndConfigurationItemBusAppNameContainingIgnoreCase(String appName, String compName);
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/TemplateRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Template;
import org.bson.types.ObjectId;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
* {@link Template} repository.
*/
public interface TemplateRepository extends PagingAndSortingRepository<Template, ObjectId> {
Template findByTemplate(String template);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ScoreRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.score.ScoreMetric;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.CodeQuality;
/**
* Repository for {@link CodeQuality} data.
*/
public interface ScoreRepository extends CrudRepository<ScoreMetric, ObjectId>, QueryDslPredicateExecutor<ScoreMetric> {
/**
* Finds the {@link ScoreMetric} data point at the given timestamp for a specific
* {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @param timestamp timstamp
* @return a {@link CodeQuality}
*/
ScoreMetric findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
/**
* Finds all {@link ScoreMetric}s for a given {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @return list of {@link ScoreMetric}
*/
ScoreMetric findByCollectorItemId(ObjectId collectorItemId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CloudInstanceRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CloudInstance;
import com.capitalone.dashboard.model.NameValue;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.Collection;
import java.util.List;
public interface CloudInstanceRepository extends
CrudRepository<CloudInstance, ObjectId>,
QueryDslPredicateExecutor<CloudInstance> {
@Query(value = "{instanceId : ?0}")
CloudInstance findByInstanceId(String instanceId);
@Query(value = "{ tags: ?0 }")
Collection<CloudInstance> findByTags(List<NameValue> tags);
@Query(value = "{ 'tags.name' : ?0, 'tags.value' : ?1 }")
Collection<CloudInstance> findByTagNameAndValue(String name, String value);
Collection<CloudInstance> findByInstanceIdIn(List<String> instanceId);
@Query(value = "{accountNumber : ?0}")
Collection<CloudInstance> findByAccountNumber(String accountNumber);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CmdbRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Cmdb;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Cmdb} data.
*/
public interface CmdbRepository extends CrudRepository<Cmdb, ObjectId> {
Cmdb findByConfigurationItem(String configurationItem);
List<Cmdb> findAllByConfigurationItemContainingOrCommonNameContainingAllIgnoreCase(String configItemFilter, String commonNameFilter);
Page<Cmdb> findAllByItemTypeAndValidConfigItemAndIdIn(String itemType, boolean valid, List<ObjectId> idList, Pageable pageable);
Page<Cmdb> findAllByItemTypeAndConfigurationItemContainingIgnoreCaseAndValidConfigItem(String itemType, String configurationItem, Pageable pageable, boolean valid);
Cmdb findByConfigurationItemIgnoreCase(String configurationItem);
List<Cmdb> findAllByItemType(String type);
List<Cmdb> findAllByItemTypeAndValidConfigItem(String type, boolean valid);
Cmdb findByConfigurationItemAndItemType(String confiugrationItem, String itemType);
Iterable<Cmdb> findAllByValidConfigItem(boolean validFlag);
Cmdb findByConfigurationItemIgnoreCaseOrCommonNameIgnoreCase(String configurationItem, String commonName);
Cmdb findByItemTypeAndCommonNameContainingIgnoreCase(String itemType, String commonName);
Cmdb findByItemTypeAndConfigurationItemIgnoreCase(String itemType, String configurationItem);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CloudVirtualNetworkRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CloudInstance;
import com.capitalone.dashboard.model.CloudVirtualNetwork;
import com.capitalone.dashboard.model.NameValue;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.Collection;
import java.util.List;
public interface CloudVirtualNetworkRepository extends
CrudRepository<CloudVirtualNetwork, ObjectId>,
QueryDslPredicateExecutor<CloudInstance> {
@Query(value = "{ collectorItemId: ?0 }")
CloudVirtualNetwork findByCollectorItemId(ObjectId collectorItemId);
@Query(value= "{ tags: ?0 }")
Collection<CloudVirtualNetwork> findByTags(List<NameValue> tags);
@Query(value = "{virtualNetorkId : ?0}")
CloudVirtualNetwork findByVirtualNetworkId(String virtualNetworkId);
@Query(value = "{ 'tags.name' : ?0, 'tags.value' : ?1 }")
Collection<CloudVirtualNetwork> findByTagNameAndValue(String name, String value);
Collection<CloudVirtualNetwork> findByvirtualNetworkIdIn(List<String> virtualNetworkId);
@Query(value = "{accountNumber : ?0}")
Collection<CloudVirtualNetwork> findByAccountNumber(String accountNumber);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ScoreCollectorItemRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import com.capitalone.dashboard.model.score.ScoreCollectorItem;
/**
* Repository for {@link ScoreCollectorItem}s.
*/
public interface ScoreCollectorItemRepository extends BaseCollectorItemRepository<ScoreCollectorItem> {
/**
* Finds all enabled {@link ScoreCollectorItem}s
*
* @param collectorId ID
* @return list of {@link ScoreCollectorItem}s
*/
@Query(value = "{ 'collectorId' : ?0, enabled: true}")
List<ScoreCollectorItem> findEnabledScores(ObjectId collectorId);
@Query(value="{'collectorId': ?0, 'options.dashboardId': ?1}")
ScoreCollectorItem findCollectorItemByCollectorIdAndDashboardId(ObjectId collectorId, ObjectId dashboardId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/UserInfoRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.Collection;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.AuthType;
import com.capitalone.dashboard.model.UserInfo;
import com.capitalone.dashboard.model.UserRole;
public interface UserInfoRepository extends CrudRepository<UserInfo, ObjectId>{
UserInfo findByUsernameAndAuthType(String username, AuthType authType);
Collection<UserInfo> findByAuthoritiesIn(UserRole roleAdmin);
Iterable<UserInfo> findByOrderByUsernameAsc();
UserInfo findByUsername(String userName);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ScopeOwnerRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import com.capitalone.dashboard.model.ScopeOwnerCollectorItem;
/**
* CollectorItem repository for {@link ScopeOwnerCollectorItem}.
*/
public interface ScopeOwnerRepository extends BaseCollectorItemRepository<ScopeOwnerCollectorItem> {
@Query(value = "{ 'collectorId' : ?0, 'options.teamId' : ?1, 'options.assetState': 'Active'}")
ScopeOwnerCollectorItem findTeamCollector(ObjectId collectorId, String teamId);
@Query(value = "{ 'collectorId' : ?0, 'options.teamId' : ?1, options.name : ?2, 'options.assetState': 'Active'}")
ScopeOwnerCollectorItem findTeamCollector(ObjectId collectorId, String teamId, String name);
@Query(value = "{ 'collectorId' : ?0, 'options.teamId' : ?1, enabled: true, 'options.assetState': 'Active'}")
List<ScopeOwnerCollectorItem> findEnabledTeamCollectors(ObjectId collectorId, String teamId);
/**
* This essentially returns the max change date from the collection, based
* on the last change date (or default delta change date property) available
*
* @param collectorId
* Collector ID of source system collector
* @param changeDate
* Last available change date or delta begin date property
* @return A single Change Date value that is the maximum value of the
* existing collection
*/
@Query(value = "{ 'collectorId' : ?0, 'options.changeDate' : {$gt: ?1}, '_class' : 'com.capitalone.dashboard.model.ScopeOwnerCollectorItem', 'options.assetState': 'Active'}")
List<ScopeOwnerCollectorItem> findTopByChangeDateDesc(ObjectId collectorId, String changeDate);
@Query(value = "{'options.teamId' : ?0}", fields = "{'options.teamId' : 1}")
List<ScopeOwnerCollectorItem> getTeamIdById(String teamId);
@Query(value = "{'options.assetState' : ?0}", delete = true)
List<ScopeOwnerCollectorItem> delete(String assetState);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ComponentRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.types.path.PathBuilder;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
import java.util.Map;
/**
* {@link Component} repository.
*/
public interface ComponentRepository extends CrudRepository<Component, ObjectId>,QueryDslPredicateExecutor<Component> {
@Query(value = "{'collectorItems.SCM._id': ?0}")
List<Component> findBySCMCollectorItemId(ObjectId scmCollectorItemId);
@Query(value="{'collectorItems.Build._id': ?0}")
List<Component> findByBuildCollectorItemId(ObjectId buildCollectorItemId);
@Query(value="{'collectorItems.Deployment._id': ?0}")
List<Component> findByDeployCollectorItemId(ObjectId deployCollectorItemId);
@Query(value="{'collectorItems.Incident.enabled' : ?0}")
List<Component> findByIncidentCollectorItems(boolean enabled);
default List<Component> findByCollectorTypeAndItemIdIn(CollectorType collectorType, List<ObjectId> collectorItemIds) {
BooleanBuilder builder = new BooleanBuilder();
PathBuilder<Component> path = new PathBuilder<>(Component.class, "components");
builder.and(path.get("collectorItems", Map.class).get(collectorType.toString(),List.class).get("id", ObjectId.class).in(collectorItemIds));
return (List<Component>) findAll(builder.getValue());
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/Monitor2Repository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Monitor2;
import org.bson.types.ObjectId;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public interface Monitor2Repository extends PagingAndSortingRepository<Monitor2, ObjectId> {
/**
* Find all {@link Monitor2}s for a given {@link com.capitalone.dashboard.model.Dashboard}.
*
* @param dashboardId dashboard id
* @return list of {@link Monitor2}s
*/
List<Monitor2> findByDashboardId(ObjectId dashboardId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import org.apache.commons.collections4.CollectionUtils;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Build} data.
*/
public interface RelatedCollectorItemRepository extends CrudRepository<RelatedCollectorItem, ObjectId>, QueryDslPredicateExecutor<RelatedCollectorItem> {
List<RelatedCollectorItem> findRelatedCollectorItemByLeft(ObjectId left);
List<RelatedCollectorItem> findRelatedCollectorItemByRight(ObjectId right);
List<RelatedCollectorItem> findAllByLeftAndRight(ObjectId left, ObjectId right);
default RelatedCollectorItem saveRelatedItems(ObjectId left, ObjectId right, String source, String reason) {
List<RelatedCollectorItem> items = findAllByLeftAndRight(left, right);
if (!CollectionUtils.isEmpty(items)) {
this.delete(items);
}
RelatedCollectorItem related = new RelatedCollectorItem();
related.setLeft(left);
related.setRight(right);
related.setCreationTime(System.currentTimeMillis());
related.setSource(source);
related.setReason(reason);
return save(related);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/PipelineRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Pipeline;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface PipelineRepository extends CrudRepository<Pipeline, ObjectId>, QueryDslPredicateExecutor<Pipeline> {
Pipeline findByCollectorItemId(ObjectId collectorItemId);
List<Pipeline> findByCollectorItemIdIn(List<ObjectId> collectorItemIds);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ConfigurationRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.Configuration;
public interface ConfigurationRepository extends CrudRepository<Configuration, ObjectId> , QueryDslPredicateExecutor<Configuration>{
Configuration findByCollectorName(String collectorNiceName);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/RallyFeatureRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.model.RallyFeature;
/**
* Repository for {@link CodeQuality} data.
*/
public interface RallyFeatureRepository extends CrudRepository<RallyFeature, ObjectId>, QueryDslPredicateExecutor<RallyFeature> {
/**
* Finds the {@link Rallyfeature} data point at the given timestamp for a specific
* {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @param timestamp timstamp
* @return a {@link RallyFeature}
*/
RallyFeature findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
@Query(value="{'projectId' : ?0}")
List<RallyFeature> findByIterationLists(String projectId);
@Query(value="{'projectId' : ?0, options.iterationId : ?1}")
RallyFeature findByRallyWidgetDetails(String projectId,String iterationId);
@Query(value="{'collectorItemId' :?0}")
List<RallyFeature> findByProjectIterationId(Object collectorItemId);
List<RallyFeature> findByCollectorItemIdAndRemainingDaysNot(Object collectorItemId, int remainginDays);
List<RallyFeature> findByProjectId(String projectId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CommitRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Commit;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Commit} data.
*/
public interface CommitRepository extends CrudRepository<Commit, ObjectId>, QueryDslPredicateExecutor<Commit> {
/**
* Finds the {@link Commit} with the given revision number for a specific
* {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @param revisionNumber revision number
* @return a {@link Commit}
*/
Commit findByCollectorItemIdAndScmRevisionNumber(ObjectId collectorItemId, String revisionNumber);
Long countCommitsByCollectorItemId(ObjectId collectorItemId);
Commit findByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndScmRevisionNumber (String scmUrl, String scmBranch, String scmRevisionNumber);
List<Commit> findByScmRevisionNumber (String scmUrl);
List<Commit> findByScmUrlIgnoreCaseAndScmBranch (String scmUrl, String scmBranch);
Commit findByScmRevisionNumberAndScmUrlIgnoreCaseAndScmBranchIgnoreCase(String scmRevisionNumber, String scmUrl, String branch);
List<Commit> findAllByScmRevisionNumberAndScmUrlIgnoreCaseAndScmBranchIgnoreCaseOrderByTimestampAsc (String scmRevisionNumber, String scmUrl, String branch);
@Query(value="{ 'collectorItemId': ?0, 'scmCommitTimestamp': { $gt: ?1 }}")
List<Commit> findByCollectorItemIdAndScmCommitTimestamp(ObjectId collectorItemid, Long scmCommitTimestampThreshold);
List<Commit> findByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndScmCommitTimestampIsBetween(String scmUrl, String scmBranch, long beginDate, long endDate);
List<Commit> findByCollectorItemIdAndScmCommitTimestampIsBetween(ObjectId collectorItemId, long beginDate, long endDate);
List<Commit> findCommitsByCollectorItemIdAndTimestampAfterAndPullNumberIsNull(ObjectId collectorItemId, long beginDate);
Commit findByScmRevisionNumberAndScmAuthorIgnoreCaseAndScmCommitLogAndScmCommitTimestamp(String scmRevisionNumber, String scmAuthor, String scmCommitLog, long scmCommitTimestamp);
List<Commit> findAllByScmRevisionNumberAndScmAuthorIgnoreCaseAndScmCommitLogAndScmCommitTimestamp(String scmRevisionNumber, String scmAuthor, String scmCommitLog, long scmCommitTimestamp);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CodeReposBuildsRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CodeReposBuilds;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
/**
* Repository for {@link CodeReposBuilds} data.
*/
public interface CodeReposBuildsRepository extends CrudRepository<CodeReposBuilds, ObjectId>, QueryDslPredicateExecutor<CodeReposBuilds> {
CodeReposBuilds findByCodeRepo(String codeRepo);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/MaturityModelRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.MaturityModel;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface MaturityModelRepository extends CrudRepository<MaturityModel, ObjectId>, QueryDslPredicateExecutor<MaturityModel> {
MaturityModel findByProfile(String profile);
@Query(value="{}", fields="{ profile : 1 }")
List<String> getAllProfiles();
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/RepositoryPackage.java
=====================================================
package com.capitalone.dashboard.repository;
/**
* Marker interface for repository scanning
*/
public interface RepositoryPackage {
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/EnvironmentStatusRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.EnvironmentStatus;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* {@link EnvironmentStatus} repository.
*/
public interface EnvironmentStatusRepository extends CrudRepository<EnvironmentStatus, ObjectId> {
/**
* Finds all {@link EnvironmentStatus}es for a given {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @return list of {@link EnvironmentStatus}es.
*/
List<EnvironmentStatus> findByCollectorItemId(ObjectId collectorItemId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/TeamInventoryRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Scope;
import com.capitalone.dashboard.model.TeamInventory;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Scope}.
*/
public interface TeamInventoryRepository extends CrudRepository<TeamInventory, ObjectId>,
QueryDslPredicateExecutor<TeamInventory> {
@Query(value = "{ 'collectorId' : ?0 }")
List<TeamInventory> findByCollectorId(ObjectId collectorId);
TeamInventory findByNameAndTeamId(String name, String teamId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/PerformanceRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Performance;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface PerformanceRepository extends CrudRepository<Performance, ObjectId>, QueryDslPredicateExecutor<Performance> {
Performance findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
List<Performance> findByCollectorItemId (ObjectId collectorItemId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CollectorRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorType;
import org.bson.types.ObjectId;
import java.util.List;
/**
* A {@link Collector} repository
*/
public interface CollectorRepository extends BaseCollectorRepository<Collector> {
List<Collector> findById(ObjectId id);
List<Collector> findAllByCollectorType(CollectorType collectorType);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/ServiceRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Service;
import org.bson.types.ObjectId;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
* A {@link Service} repository
*/
public interface ServiceRepository extends PagingAndSortingRepository<Service, ObjectId> {
/**
* Find all {@link Service}s for a given {@link com.capitalone.dashboard.model.Dashboard}.
*
* @param dashboardId dashboard id
* @return list of {@link Service}s
*/
List<Service> findByDashboardId(ObjectId dashboardId);
/**
* Find all dependent {@link Service}s for a given {@link com.capitalone.dashboard.model.Dashboard}.
*
* @param dashboardId dashboard id
* @return list of {@link Service}s
*/
List<Service> findByDependedBy(ObjectId dashboardId);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/GitRequestRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.GitRequest;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link GitRequest} data.
*/
public interface GitRequestRepository extends CrudRepository<GitRequest, ObjectId>, QueryDslPredicateExecutor<GitRequest> {
List<GitRequest> findByCollectorItemIdAndRequestType(ObjectId collectorItemId, String requestType);
@Query(value="{ 'collectorItemId' : ?0, 'requestType' : ?1}", fields="{ 'number' : 2, 'updatedAt' : 3 }")
List<GitRequest> findRequestNumberAndLastUpdated(ObjectId collectorItemId, String requestType);
@Query(value="{ 'collectorItemId' : ?0, 'state' : { $ne : 'merged' }}", fields="{ 'requestType' : 1, 'number' : 2, 'updatedAt' : 3, 'id' : 4}")
List<GitRequest> findNonMergedRequestNumberAndLastUpdated(ObjectId collectorItemId);
@Query(value="{ 'collectorItemId' : ?0}", fields="{ 'requestType' : 1, 'number' : 2, 'updatedAt' : 3, 'id' : 4}")
List<GitRequest> findRequestNumberAndLastUpdated(ObjectId collectorItemId);
GitRequest findByCollectorItemIdAndScmRevisionNumber(ObjectId collectorItemId, String revisionNumber);
GitRequest findByCollectorItemIdAndNumberAndRequestType(ObjectId collectorItemId, String number, String requestType);
@Query(value="{ 'collectorItemId': ?0, 'scmCommitTimestamp': { $gt: ?1 }}")
List<GitRequest> findByCollectorItemIdAndScmCommitTimestamp(ObjectId collectorItemid,
Long scmCommitTimestampThreshold);
GitRequest findByCollectorItemIdAndNumber(ObjectId collectorItemId, String number);
List<GitRequest> findByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndCreatedAtGreaterThanEqualAndMergedAtLessThanEqual(String scmUrl, String scmBranch, long beginDt, long endDt);
List<GitRequest> findByScmUrlIgnoreCaseAndScmBranchIgnoreCase(String scmUrl, String scmBranch);
List<GitRequest> findByScmRevisionNumber(String revisionNumber);
List<GitRequest> findByCollectorItemIdAndMergedAtIsBetween(ObjectId collectorItemId, long beginDate, long endDate);
GitRequest findByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndNumberAndRequestTypeIgnoreCase(String scmUrl, String scmBranch, String number, String requestType);
@Query(value="{'$or':[{'scmRevisionNumber' : ?0}, {'scmMergeEventRevisionNumber' : ?0}]}")
GitRequest findByScmRevisionNumberOrScmMergeEventRevisionNumber(String revisionNumber);
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/BaseCollectorRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorType;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Generic Collector repository that contains methods common to any model that extends from
* Collector.
*
* @param <T> Class that extends {@link Collector}
*/
public interface BaseCollectorRepository<T extends Collector> extends CrudRepository<T, ObjectId> {
/**
* Finds a {@link Collector} by its name.
*
* @param name name
* @return a {@link Collector}
*/
T findByName(String name);
/**
* Finds all {@link Collector}s of a given {@link CollectorType}.
*
* @param collectorType a {@link CollectorType}
* @return list of {@link Collector}s of a given {@link CollectorType}
*/
List<T> findByCollectorType(CollectorType collectorType);
/**
* Finds all {@link Collector}s of a given {@link CollectorType}.
*
* @param collectorType a {@link CollectorType}
* @param name
* @return list of {@link Collector}s of a given {@link CollectorType}
*/
List<T> findByCollectorTypeAndName(CollectorType collectorType, String name);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQueryImpl.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.util.GitHubParsedUrl;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Component
public class CustomRepositoryQueryImpl implements CustomRepositoryQuery {
private final MongoTemplate template;
private static final String REGEX_ANY_STRING_INCLUDING_EMPTY = "^$|^.*";
@Autowired
public CustomRepositoryQueryImpl(MongoTemplate template) {
this.template = template;
}
@Override
public List<CollectorItem> findCollectorItemsBySubsetOptions(ObjectId id, Map<String, Object> allOptions, Map<String, Object> uniqueOptions,Map<String, Object> uniqueOptionsFromCollector) {
Criteria c = Criteria.where("collectorId").is(id);
uniqueOptions.values().removeIf(d-> d.equals(null) || ((d instanceof String) && StringUtils.isEmpty((String) d)));
for (Map.Entry<String, Object> e : allOptions.entrySet()) {
if (uniqueOptionsFromCollector.containsKey(e.getKey())) {
c = getCriteria(uniqueOptions, c, e);
}
}
List<CollectorItem> items = template.find(new Query(c), CollectorItem.class);
return items;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/repository/TestResultRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.TestResult;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
/**
* Repository for {@link TestResult} data.
*/
public interface TestResultRepository extends CrudRepository<TestResult, ObjectId>, QueryDslPredicateExecutor<TestResult> {
/**
* Finds the {@link TestResult} with the given execution ID for a specific
* {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item ID
* @param executionId execution ID
* @return a TestSuite
*/
TestResult findByCollectorItemIdAndExecutionId(ObjectId collectorItemId, String executionId);
TestResult findByCollectorItemId(ObjectId collectorItemId);
List<TestResult> findByUrlAndTimestampGreaterThanEqualAndTimestampLessThanEqual(String jobUrl,long beginDt,long endDt);
List<TestResult> findByCollectorItemIdAndTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/response/BuildDataCreateResponse.java
=====================================================
package com.capitalone.dashboard.response;
import com.capitalone.dashboard.model.BuildStatus;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.bson.types.ObjectId;
public class BuildDataCreateResponse {
private ObjectId id;
private ObjectId collectorItemId;
private ObjectId dashboardId;
private long timestamp;
private String number;
private String buildUrl;
private long startTime;
private long endTime;
private long duration;
private BuildStatus buildStatus;
private String startedBy;
private String log;
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public ObjectId getDashboardId() {
return dashboardId;
}
public void setDashboardId(ObjectId dashboardId) {
this.dashboardId = dashboardId;
}
public long getTimestamp() {
return timestamp;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/response/CloudVolumeAggregatedResponse.java
=====================================================
package com.capitalone.dashboard.response;
public class CloudVolumeAggregatedResponse {
private int nonEncryptedCount;
private int noAttachmentCount;
private int noAccountCount;
private int nonTaggedCount;
private int totalCount;
private long lastUpdated;
public int getNonEncryptedCount() {
return nonEncryptedCount;
}
public void setNonEncryptedCount(int nonEncryptedCount) {
this.nonEncryptedCount = nonEncryptedCount;
}
public int getNoAttachmentCount() {
return noAttachmentCount;
}
public void setNoAttachmentCount(int noAttachmentCount) {
this.noAttachmentCount = noAttachmentCount;
}
public int getNoAccountCount() {
return noAccountCount;
}
public void setNoAccountCount(int noAccountCount) {
this.noAccountCount = noAccountCount;
}
public int getNonTaggedCount() {
return nonTaggedCount;
}
public void setNonTaggedCount(int nonTaggedCount) {
this.nonTaggedCount = nonTaggedCount;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/response/CloudVirtualNetworkAggregatedResponse.java
=====================================================
package com.capitalone.dashboard.response;
public class CloudVirtualNetworkAggregatedResponse {
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/response/RallyBurnDownResponse.java
=====================================================
package com.capitalone.dashboard.response;
import java.util.List;
public class RallyBurnDownResponse {
private List<String> iterationDates;
private List<String> toDoHours;
private List<Double> acceptedPoints;
private List<Double> totalTaskEstimate;
public List<Double> getTotalTaskEstimate() {
return totalTaskEstimate;
}
public void setTotalTaskEstimate(List<Double> totalTaskEstimate) {
this.totalTaskEstimate = totalTaskEstimate;
}
public List<String> getIterationDates() {
return iterationDates;
}
public void setIterationDates(List<String> iterationDates) {
this.iterationDates = iterationDates;
}
public List<String> getToDoHours() {
return toDoHours;
}
public void setToDoHours(List<String> toDoHours) {
this.toDoHours = toDoHours;
}
public List<Double> getAcceptedPoints() {
return acceptedPoints;
}
@Override
public String toString() {
return "RallyBurnDownResponse [iterationDates=" + iterationDates + ", toDoHours=" + toDoHours
+ ", acceptedPoints=" + acceptedPoints + "]";
}
public void setAcceptedPoints(List<Double> acceptedPoints) {
this.acceptedPoints = acceptedPoints;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/response/CloudSubNetworkAggregatedResponse.java
=====================================================
package com.capitalone.dashboard.response;
public class CloudSubNetworkAggregatedResponse {
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/PipelineUtils.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineCommit;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.RepoBranch;
import com.capitalone.dashboard.model.SCM;
import com.capitalone.dashboard.model.Widget;
import com.capitalone.dashboard.repository.CommitRepository;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public final class PipelineUtils {
private PipelineUtils(){
}
public static Map<String, PipelineCommit> commitSetToMap(Set<PipelineCommit> set){
Map<String, PipelineCommit> returnMap = new HashMap<>();
for(PipelineCommit commit : set){
returnMap.put(commit.getScmRevisionNumber(), commit);
}
return returnMap;
}
public static Map<PipelineStage, String> getStageToEnvironmentNameMap(Dashboard dashboard) {
Map<PipelineStage, String> rt = new LinkedHashMap<>();
for(Widget widget : dashboard.getWidgets()) {
if(widget.getName().equalsIgnoreCase("build")){
rt.put(PipelineStage.valueOf("Build"), "Build");
}if(widget.getName().equalsIgnoreCase("repo")){
rt.put(PipelineStage.valueOf("Commit"), "Commit");
}
if (widget.getName().equalsIgnoreCase("pipeline")) {
Map<?,?> gh = (Map<?,?>) widget.getOptions().get("mappings");
for (Map.Entry<?, ?> entry : gh.entrySet()) {
rt.put(PipelineStage.valueOf((String) entry.getKey()), (String) entry.getValue());
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/EncryptionException.java
=====================================================
package com.capitalone.dashboard.util;
public class EncryptionException extends Exception {
private static final long serialVersionUID = -4472911532254883259L;
/**
* Constructs a {@code EncrytionException} with no detail message.
*/
public EncryptionException() {
super();
}
/**
* Constructs a {@code EncrytionException} with the specified
* detail message.
*
* @param s the detail message.
*/
public EncryptionException(String s) {
super(s);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/FeatureCollectorConstants.java
=====================================================
package com.capitalone.dashboard.util;
/**
* This class is established to house any globally-referenced constant values.
* Most values that can or should be modifiable at deploy-time should be kept in
* a properties file, but valid use cases for constant values should be added
* here.
*
* @author kfk884
*
*/
public final class FeatureCollectorConstants {
public static final String JIRA = "Jira";
public static final String JIRA_XRAY = "Jira XRay";
public static final String VERSIONONE = "VersionOne";
public static final String GITLAB = "GitlabFeature";
@SuppressWarnings("PMD.AvoidUsingHardCodedIP")
// not an IP
public static final String AGENT_VER = "01.00.00.01";
public static final String AGENT_NAME = "Hygieia Dashboard - VersionOne Feature Collector";
public static final String STORY_HOURS_ESTIMATE = "hours";
public static final String STORY_POINTS_ESTIMATE = "storypoints";
public static final String STORY_COUNT_ESTIMATE = "count";
public static final String SPRINT_SCRUM = "scrum";
public static final String SPRINT_KANBAN = "kanban";
public static final String TEAM_ID_ANY = "any";
public static final String PROJECT_ID_ANY = "any";
public static final String TOOL_TYPE = "featureTool";
public static final String PROJECT_NAME = "projectName";
public static final String PROJECT_ID = "projectId";
public static final String TEAM_NAME = "teamName";
public static final String TEAM_ID = "teamId";
public static final String ESTIMATE_METRIC_TYPE = "estimateMetricType";
public static final String SPRINT_TYPE = "sprintType";
public static final String LIST_TYPE = "listType";
public static final String SHOW_STATUS = "showStatus";
private FeatureCollectorConstants() {
// This class should not be instantiable
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/CoreFeatureSettings.java
=====================================================
package com.capitalone.dashboard.util;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "feature")
public class CoreFeatureSettings {
private List<String> todoStatuses;
private List<String> doingStatuses;
private List<String> doneStatuses;
public List<String> getTodoStatuses() {
return todoStatuses;
}
public void setTodoStatuses(List<String> todoStatuses) {
this.todoStatuses = todoStatuses;
}
public List<String> getDoingStatuses() {
return doingStatuses;
}
public void setDoingStatuses(List<String> doingStatuses) {
this.doingStatuses = doingStatuses;
}
public List<String> getDoneStatuses() {
return doneStatuses;
}
public void setDoneStatuses(List<String> doneStatuses) {
this.doneStatuses = doneStatuses;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/Supplier.java
=====================================================
package com.capitalone.dashboard.util;
/**
* A class that can supply objects of a single type. Semantically, this could
* be a factory, generator, builder, closure, or something else entirely. No
* guarantees are implied by this interface.
*
*/
public interface Supplier<T> {
/**
* Retrieves an instance of the appropriate type. The returned object may or
* may not be a new instance, depending on the implementation.
*
* @return an instance of the appropriate type
*/
T get();
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/HygieiaUtils.java
=====================================================
package com.capitalone.dashboard.util;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.lang3.StringUtils;
import org.jboss.logging.Logger;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
public class HygieiaUtils {
private static final Logger LOGGER = Logger.getLogger(HygieiaUtils.class);
public static void mergeObjects(Object dest, Object source) throws IllegalAccessException, InvocationTargetException {
new BeanUtilsBean() {
@Override
public void copyProperty(Object dest, String name, Object value)
throws IllegalAccessException, InvocationTargetException {
if (value != null) {
super.copyProperty(dest, name, value);
}
}
}.copyProperties(dest, source);
}
/**
* Determines if two urls are equal accounting for load balancers and variations in schemes.
* <p>
* Two urls are equal if:
* <ul>
* <li>the root domain is the same</li>
* <li>the path is the same (ignoring .git at the end)</li>
* <li>the query is the same</li>
* </ul>
* <p>
* It is assumed that load balancers use a distinct subdomain in a url.
*
* @param url1
* @param url2
* @return if the two urls are equal ignoring load balancers, url schemes, and path endings.
*/
@SuppressWarnings("PMD.NPathComplexity")
public static boolean smartUrlEquals(String url1, String url2) {
String u1 = nullSafe(url1);
String u2 = nullSafe(url2);
String u1Host = null;
String u1Path = null;
String u1Query = null;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/SuperFeatureComparator.java
=====================================================
package com.capitalone.dashboard.util;
import java.util.Comparator;
import com.capitalone.dashboard.model.Feature;
/**
* Comparator utility class for handling comparisons of Super Features (epics)
* to other Super Features. This is used when manipulating results of MongoDB
* repository responses and sorting them in an efficient manner within memory.
*
* @author kfk884
*
*/
public class SuperFeatureComparator implements Comparator<Feature> {
public SuperFeatureComparator() {
// No instantiation requirements
}
/**
* Compares two feature object models and sorts based on their subsequent
* epic IDs, as a string comparator
*
* @return A list of Features sorted by EpicID, descending
*/
@Override
public int compare(Feature f, Feature ff) {
if (f.getsEpicID().compareToIgnoreCase(ff.getsEpicID()) <= -1) {
return -1;
} else if (f.getsEpicID().compareToIgnoreCase(ff.getsEpicID()) >= 1) {
return 1;
} else {
return 0;
}
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/Encryption.java
=====================================================
package com.capitalone.dashboard.util;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@SuppressWarnings("PMD.AvoidCatchingNPE") // TODO: Avoid catching NullPointerException; consider removing the cause of the NPE
public final class Encryption {
private static final String ALGO = "DESede";
private static final Logger LOGGER = LoggerFactory.getLogger(Encryption.class);
private Encryption() {
// util class.
}
public static String getStringKey() throws EncryptionException {
SecretKey key = null;
try {
key = KeyGenerator.getInstance(ALGO).generateKey();
} catch (NoSuchAlgorithmException e) {
throw new EncryptionException("Cannot generate a secret key" + '\n' + e.getMessage());
}
return Base64.encodeBase64String(key.getEncoded());
}
public static SecretKey getSecretKey() throws EncryptionException {
SecretKey key = null;
try {
key = KeyGenerator.getInstance(ALGO).generateKey();
} catch (NoSuchAlgorithmException e) {
throw new EncryptionException("Cannot generate a secret key" + '\n' + e.getMessage());
}
return key;
}
public static String encryptString(String message, SecretKey key)
throws EncryptionException {
String encryptedMessage = "";
try {
Cipher cipher = Cipher.getInstance(ALGO);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedBytes = cipher.doFinal(message.getBytes());
encryptedMessage = Base64.encodeBase64String(encryptedBytes);
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/DashboardUtils.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.repository.ComponentRepository;
import org.bson.types.ObjectId;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public final class DashboardUtils {
/**
* Gets a unique set of collector item ids for a given collector from all components in the Hygieia instance.
* @param componentRepository component repo
* @param collector collector
* @return unique set of collector item ids
*/
public static Set<ObjectId> getUniqueCollectorItemIDsFromAllComponents(ComponentRepository componentRepository, Collector collector) {
Set<ObjectId> uniqueIDs = new HashSet<>();
for (com.capitalone.dashboard.model.Component comp : componentRepository.findAll()) {
if (comp.getCollectorItems() == null || comp.getCollectorItems().isEmpty()) continue;
List<CollectorItem> itemList = comp.getCollectorItems().get(collector.getCollectorType());
if (itemList == null) continue;
for (CollectorItem ci : itemList) {
if (ci != null && ci.getCollectorId().equals(collector.getId())) {
uniqueIDs.add(ci.getId());
}
}
}
return uniqueIDs;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/GitHubParsedUrl.java
=====================================================
package com.capitalone.dashboard.util;
public class GitHubParsedUrl {
private String url;
private String host;
private String apiUrl;
private String orgName;
private String repoName;
public GitHubParsedUrl(String url){
this.url = url;
parse();
}
private void parse(){
if (url.endsWith(".git")) {
url = url.substring(0, url.lastIndexOf(".git"));
}
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getApiUrl() {
return apiUrl;
}
public void setApiUrl(String apiUrl) {
this.apiUrl = apiUrl;
}
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/GitBranchSpec.java
=====================================================
package com.capitalone.dashboard.util;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
public class GitBranchSpec {
private String name;
public String getName() {
return name;
}
private void setName(String name) {
if (name == null) {
throw new IllegalArgumentException();
} else if (name.length() == 0) {
this.name = "**";
} else {
this.name = name.trim();
}
}
public GitBranchSpec(String name) {
setName(name);
}
public String toString() {
return name;
}
public boolean matches(String item) {
return getPattern().matcher(item).matches();
}
private Pattern getPattern() {
String expandedName = name;
// use regex syntax directly if name starts with colon
if ((expandedName.charAt(0) == ':') && (expandedName.length() > 1)) {
String regexSubstring = expandedName.substring(1, expandedName.length());
return Pattern.compile(regexSubstring);
}
// build a pattern into this builder
StringBuilder builder = new StringBuilder(100);
// for legacy reasons (sic) we do support various branch spec format to declare remotes / branches
builder.append("(refs/heads/");
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/util/UnsafeDeleteException.java
=====================================================
package com.capitalone.dashboard.util;
/**
* Created by jkc on 1/20/16.
*/
public class UnsafeDeleteException extends RuntimeException {
private static final long serialVersionUID = -664077740219817001L;
public UnsafeDeleteException() {
super();
}
public UnsafeDeleteException(String s) {
super(s);
}
public UnsafeDeleteException(String s, Throwable throwable) {
super(s, throwable);
}
public UnsafeDeleteException(Throwable throwable) {
super(throwable);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/config/CollectorConfig.java
=====================================================
package com.capitalone.dashboard.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
/**
* Configuration class that creates Beans common to any Collector implementation
*/
@Configuration
public class CollectorConfig {
@Bean
public TaskScheduler taskScheduler() {
return new ThreadPoolTaskScheduler();
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/config/collector/CloudConfig.java
=====================================================
package com.capitalone.dashboard.config.collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.NameValue;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class CloudConfig extends CollectorItem {
private static final String CLOUD_PROVIDER = "provider";
private static final List<NameValue> TAGS = new ArrayList<>();
private static final int AGE_ERROR_THRESHOLD_DEFAULT = 60;
private static final int AGE_ALERT_THRESHOLD_DEFAULT = 45;
private static final double CPU_ERROR_THRESHOLD_DEFAULT = 80.0;
private static final double CPU_ALERT_THRESHOLD_DEFAULT = 50.0;
private static final double MEMORY_ERROR_THRESHOLD_DEFAULT = 80.0;
private static final double MEMORY_ALERT_THRESHOLD_DEFAULT = 50.0;
private static final int DISK_IO_ERROR_THRESHOLD_DEFAULT = 80;
private static final int DISK_IO_ALERT_THRESHOLD_DEFAULT = 50;
private static final int NETWORK_IO_ERROR_THRESHOLD_DEFAULT = 80;
private static final int NETWORK_IO_ALERT_THRESHOLD_DEFAULT = 50;
// private static final int SUBNET_IP_ERROR_THRESHOLD_DEFAULT = 80;
// private static final int SUBNET_IP_ALERT_THRESHOLD_DEFAULT = 50;
private static final String AGE_ERROR = "ageError";
private static final String AGE_ALERT = "ageAlert";
private static final String CPU_ERROR = "cpuError";
private static final String CPU_ALERT = "cpuAlert";
private static final String MEMORY_ERROR = "memoryError";
private static final String MEMORY_ALERT = "memoryAlert";
private static final String DISKIO_ERROR = "diskIOError";
private static final String DISKIO_ALERT = "diskIOAlert";
private static final String NETWORKIO_ERROR = "networkIOError";
private static final String NETWORKIO_ALERT = "networkIOAlert";
public String getCloudProvider() {
return (String) getOptions().get(CLOUD_PROVIDER);
}
public void setCloudProvider(String cloudProvider) {
getOptions().put(CLOUD_PROVIDER, cloudProvider);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/config/MongoConfig.java
=====================================================
package com.capitalone.dashboard.config;
import com.capitalone.dashboard.repository.RepositoryPackage;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Component
@EnableMongoRepositories(basePackageClasses = RepositoryPackage.class)
public class MongoConfig extends AbstractMongoConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(MongoConfig.class);
@Value("${dbname:dashboard}")
private String databaseName;
@Value("${dbhost:localhost}")
private String host;
@Value("${dbport:27017}")
private int port;
@Value("${dbreplicaset:false}")
private String dbreplicaset;
@Value("#{'${dbhostport:localhost:27017}'.split(',')}")
private List<String> hostport;
@Value("${dbusername:}")
private String userName;
@Value("${dbpassword:}")
private String password;
@Override
protected String getDatabaseName() {
return databaseName;
}
@Override
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/collector/CollectorTask.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.repository.BaseCollectorRepository;
import com.google.common.base.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* Base class for Collector task implementation which provides subclasses with
* the following:
* <p>
* <ol>
* <li>Creates a Collector instance the first time the collector runs.</li>
* <li>Uses TaskScheduler to schedule the job based on the provided cron when the process starts.</li>
* <li>Saves the last execution time on the collector when the collection run finishes.</li>
* <li>Sets the collector online/offline when the collector process starts/stops</li>
* </ol>
*
* @param <T> Class that extends Collector
*/
@Component
public abstract class CollectorTask<T extends Collector> implements Runnable {
private static final Logger LOGGER = LoggerFactory.getLogger(CollectorTask.class);
private final TaskScheduler taskScheduler;
private final String collectorName;
@Autowired
protected CollectorTask(TaskScheduler taskScheduler, String collectorName) {
this.taskScheduler = taskScheduler;
this.collectorName = collectorName;
}
@Override
public final void run() {
LOGGER.info("Running Collector: {}", collectorName);
T collector = getCollectorRepository().findByName(collectorName);
if (collector == null) {
// Register new collector
collector = getCollectorRepository().save(getCollector());
} else {
// In case the collector options changed via collectors properties setup.
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItem.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.GenericCollectorItem;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.GenericCollectorItemRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Component
public abstract class CollectorTaskWithGenericItem<T extends Collector> extends CollectorTask<T> {
private final CollectorItemRepository collectorItemRepository;
private final GenericCollectorItemRepository genericCollectorItemRepository;
private final RelatedCollectorItemRepository relatedCollectorItemRepository;
@Autowired
public CollectorTaskWithGenericItem(TaskScheduler taskScheduler, String collectorName, CollectorItemRepository collectorItemRepository, GenericCollectorItemRepository genericCollectorItemRepository, RelatedCollectorItemRepository relatedCollectorItemRepository) {
super(taskScheduler, collectorName);
this.collectorItemRepository = collectorItemRepository;
this.genericCollectorItemRepository = genericCollectorItemRepository;
this.relatedCollectorItemRepository = relatedCollectorItemRepository;
}
public Map<ObjectId, Set<ObjectId>> processGenericItems(List<String> toolServers) {
List<GenericCollectorItem> genericCollectorItems = genericCollectorItemRepository.findAllByToolNameAndProcessTimeEquals(getCollector().getName(), 0L);
if (CollectionUtils.isEmpty(genericCollectorItems)) {
return Collections.emptyMap();
}
Map<ObjectId, Set<ObjectId>> collectorItemBuildIds = new HashMap<>();
genericCollectorItems.forEach(gci -> {
toolServers.stream()
.map(server -> Lists.newArrayList(collectorItemRepository.findAllByOptionMapAndCollectorIdsIn(getGenericCollectorItemOptions(server, gci), Lists.newArrayList(getCollector().getId()))))
.forEach(collectorItems -> collectorItems.forEach(item -> {
//Save as related item. Related Item event listener will process it.
if (!collectorItemBuildIds.containsKey(item.getId())) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/collector/RestOperationsSupplier.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.util.Supplier;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestOperations;
import org.springframework.web.client.RestTemplate;
/**
* Supplier that returns an instance of RestOperations
*/
@Component
public class RestOperationsSupplier implements Supplier<RestOperations> {
@Override
public RestOperations get() {
return new RestTemplate();
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/status/LibraryPolicyAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum LibraryPolicyAuditStatus {
LIBRARY_POLICY_AUDIT_FAIL,
LIBRARY_POLICY_SCAN_FAIL,
LIBRARY_POLICY_AUDIT_MISSING,
LIBRARY_POLICY_AUDIT_DETAIL_MISSING,
LIBRARY_POLICY_AUDIT_OK,
LIBRARY_POLICY_FOUND_HIGH_SECURITY,
LIBRARY_POLICY_FOUND_HIGH_LICENSE,
LIBRARY_POLICY_FOUND_CRITICAL_SECURITY,
LIBRARY_POLICY_FOUND_CRITICAL_LICENSE
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/status/CodeReviewAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum CodeReviewAuditStatus {
//peer review type LGTM, GH REVIEW, COMMENTS ONLY
PEER_REVIEW_LGTM_SELF_APPROVAL,
PEER_REVIEW_LGTM_ERROR,
PEER_REVIEW_LGTM_PENDING,
PEER_REVIEW_LGTM_UNKNOWN,
PEER_REVIEW_LGTM_SUCCESS,
PEER_REVIEW_BY_SERVICEACCOUNT,
PEER_REVIEW_GHR,
PEER_REVIEW_GHR_SELF_APPROVAL,
PEER_REVIEW_REG_COMMENTS,
PEER_REVIEW_REV_COMMENTS,
//no pull requests for queried date range
NO_PULL_REQ_FOR_DATE_RANGE,
//direct commits to master
DIRECT_COMMITS_TO_BASE,
DIRECT_COMMITS_TO_BASE_FIRST_COMMIT,
COMMIT_AUTHOR_EQ_SYSTEM_USER,
DIRECT_COMMIT_NONCODE_CHANGE,
DIRECT_COMMIT_NONCODE_CHANGE_SERVICE_ACCOUNT,
DIRECT_COMMIT_NONCODE_CHANGE_USER_ACCOUNT,
//commit author v/s who merged the pr
COMMITAUTHOR_NE_MERGECOMMITER,
COMMITAUTHOR_EQ_MERGECOMMITER,
MERGECOMMITER_NOT_FOUND,
COMMITAUTHOR_EQ_SERVICEACCOUNT,
MERGECOMMITER_EQ_SERVICEACCOUNT,
//peer review of a pull request
PULLREQ_REVIEWED_BY_PEER,
PULLREQ_NOT_PEER_REVIEWED,
BASE_FIRST_COMMIT,
//type of git workflow
GIT_FORK_STRATEGY,
GIT_BRANCH_STRATEGY,
GIT_NO_WORKFLOW,
REPO_NOT_CONFIGURED,
PENDING_DATA_COLLECTION,
NO_COMMIT_FOR_DATE_RANGE, //Removew this later when we can remove legacy peer review
COMMIT_AFTER_PR_MERGE, COLLECTOR_ITEM_ERROR,
SCM_AUTHOR_LOGIN_INVALID, //passed when SCM AUTHOR is unavailable
DIRECT_COMMIT_CHANGE_WHITELISTED_ACCOUNT
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/status/CodeQualityAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum CodeQualityAuditStatus {
CODE_QUALITY_AUDIT_FAIL,
STATIC_SECURITY_SCAN_FAIL,
CODE_QUALITY_AUDIT_GATE_MISSING,
QUALITY_PROFILE_VALIDATION_AUDIT_OK,
QUALITY_PROFILE_VALIDATION_AUDIT_FAIL,
QUALITY_PROFILE_VALIDATION_AUDIT_NO_CHANGE,
CODE_QUALITY_AUDIT_OK,
CODE_QUALITY_DETAIL_MISSING,
STATIC_SECURITY_SCAN_AUDIT_NO_CHANGE,
STATIC_SECURITY_SCAN_MISSING,
STATIC_SECURITY_SCAN_OK,
STATIC_SECURITY_SCAN_NO_CLOSED_FINDINGS,
STATIC_SECURITY_SCAN_FOUND_CRITICAL,
STATIC_SECURITY_SCAN_FOUND_HIGH,
COLLECTOR_ITEM_ERROR,
CODE_QUALITY_NOT_CONFIGURED,
CODE_QUALITY_GATES_FOUND,
CODE_QUALITY_CHECK_IS_CURRENT,
CODE_QUALITY_THRESHOLD_BLOCKER_MET,
CODE_QUALITY_THRESHOLD_CRITICAL_MET,
CODE_QUALITY_THRESHOLD_UNIT_TEST_MET,
CODE_QUALITY_THRESHOLD_CODE_COVERAGE_MET,
CODE_QUALITY_THRESHOLD_BLOCKER_FOUND,
CODE_QUALITY_THRESHOLD_CRITICAL_FOUND,
CODE_QUALITY_THRESHOLD_UNIT_TEST_FOUND,
CODE_QUALITY_THRESHOLD_CODE_COVERAGE_FOUND
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/status/ArtifactAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum ArtifactAuditStatus {
ART_SYS_ACCT_BUILD_AUTO,
ART_SYS_ACCT_BUILD_USER,
ART_DOCK_IMG_FOUND,
ART_SYS_ACCT_BUILD_THIRD_PARTY,
COLLECTOR_ITEM_ERROR,
NO_ACTIVITY,
UNAVAILABLE,
ART_PROD_DEPLOY_OK,
ART_PROD_DEPLOY_FAIL,
ART_TEST_FOUND,
ART_TEST_NOT_FOUND,
ARTIFACT_NOT_CONFIGURED
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/status/TestResultAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum TestResultAuditStatus {
TEST_RESULT_AUDIT_FAIL,
TEST_RESULT_AUDIT_MISSING,
TEST_RESULT_MISSING,
TEST_RESULT_AUDIT_OK,
TEST_RESULT_SKIPPED,
TEST_RESULTS_TRACEABILITY_NOT_FOUND,
TEST_RESULTS_TRACEABILITY_STORY_NOT_FOUND,
TEST_RESULTS_TRACEABILITY_STORY_MATCH,
TEST_RESULTS_TRACEABILITY_THRESHOLD_DEFAULT,
TEST_RESULTS_TRACEABILITY_STORY_STATUS_INVALID,
TEST_RESULTS_TRACEABILITY_NOT_FOUND_IN_GIVEN_DATE_RANGE
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/status/PerformanceTestAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum PerformanceTestAuditStatus {
PERF_RESULT_AUDIT_FAIL,
PERF_RESULT_AUDIT_MISSING,
PERF_RESULT_AUDIT_OK,
PERFORMANCE_THRESHOLD_RESPONSE_TIME_MET,
PERFORMANCE_THRESHOLD_TRANSACTIONS_PER_SECOND_MET,
PERFORMANCE_THRESHOLD_ERROR_RATE_MET,
PERFORMANCE_COMMIT_IS_CURRENT,
PERFORMANCE_THRESHOLDS_ERROR_RATE_FOUND,
PERFORMANCE_THRESHOLDS_TRANSACTIONS_PER_SECOND_FOUND,
PERFORMANCE_THRESHOLDS_RESPONSE_TIME_FOUND,
PERFORMANCE_MET,
PERFORMANCE_CHANGE_UNAUTHORIZED,
COLLECTOR_ITEM_ERROR
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/status/BuildAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum BuildAuditStatus{
BUILD_JOB_IS_NON_PROD,
BUILD_JOB_CONFIGURATION_REVIEW_FAIL,
BUILD_JOB_CONFIGURATION_REVIEW_PASS,
BUILD_JOB_CONFIGURATION_NO_CHANGE,
COLLECTOR_ITEM_ERROR, BUILD_MATCHES_REPO, BUILD_REPO_MISMATCH, BUILD_AUTHOR_EQ_REPO_AUTHOR, BUILD_AUTHOR_NE_REPO_AUTHOR, NO_BUILD_FOUND, BUILD_JOB_IS_PROD
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/status/DashboardAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum DashboardAuditStatus {
DASHBOARD_BAD_LOOKUP_DATA,
DASHBOARD_REPO_NOT_CONFIGURED,
DASHBOARD_BUILD_CONFIGURED,
DASHBOARD_BUILD_NOT_CONFIGURED,
DASHBOARD_CODEQUALITY_CONFIGURED,
DASHBOARD_CODEQUALITY_NOT_CONFIGURED,
DASHBOARD_STATIC_SECURITY_ANALYSIS_CONFIGURED,
DASHBOARD_STATIC_SECURITY_ANALYSIS_NOT_CONFIGURED,
DASHBOARD_LIBRARY_POLICY_ANALYSIS_CONFIGURED,
DASHBOARD_LIBRARY_POLICY_ANALYSIS_NOT_CONFIGURED,
DASHBOARD_NOT_REGISTERED,
DASHBOARD_TEST_CONFIGURED,
DASHBOARD_TEST_NOT_CONFIGURED,
DASHBOARD_REPO_BUILD_VALID,
DASHBOARD_REPO_BUILD_INVALID,
DASHBOARD_REPO_PR_AUTHOR_EQ_BUILD_AUTHOR,
DASHBOARD_REPO_PR_AUTHOR_NE_BUILD_AUTHOR,
// Error collecting from repo
COLLECTOR_ITEM_ERROR, // Git repo not configured
DASHBOARD_PERFORMANCE_TEST_CONFIGURED, DASHBOARD_PERFORMANCE_TEST_NOT_CONFIGURED, DASHBOARD_REPO_CONFIGURED,
DASHBOARD_ARTIFACT_CONFIGURED,DASHBOARD_ARTIFACT_NOT_CONFIGURED
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/JobCollectorItem.java
=====================================================
package com.capitalone.dashboard.model;
public class JobCollectorItem extends CollectorItem {
protected static final String INSTANCE_URL = "instanceUrl";
protected static final String JOB_NAME = "jobName";
protected static final String JOB_URL = "jobUrl";
public String getInstanceUrl() {
return (String) getOptions().get(INSTANCE_URL);
}
public void setInstanceUrl(String instanceUrl) {
getOptions().put(INSTANCE_URL, instanceUrl);
}
public String getJobName() {
return (String) getOptions().get(JOB_NAME);
}
public void setJobName(String jobName) {
getOptions().put(JOB_NAME, jobName);
}
public String getJobUrl() {
return (String) getOptions().get(JOB_URL);
}
public void setJobUrl(String jobUrl) {
getOptions().put(JOB_URL, jobUrl);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubRepo.java
=====================================================
package com.capitalone.dashboard.model.webhook.github;
import com.capitalone.dashboard.model.CollectorItem;
/**
* CollectorItem extension to store the github repo url and branch.
*/
public class GitHubRepo extends CollectorItem {
public static final String REPO_URL = "url"; // http://github.company.com/jack/somejavacode
public static final String BRANCH = "branch"; // master, development etc.
public static final String USER_ID = "userID";
public static final String PASSWORD = "password";
public static final String PERSONAL_ACCESS_TOKEN = "personalAccessToken";
public String getUserId() {
return (String) getOptions().get(USER_ID);
}
public String getPassword() {
return (String) getOptions().get(PASSWORD);
}
public String getRepoUrl() {
return (String) getOptions().get(REPO_URL);
}
public void setRepoUrl(String instanceUrl) {
getOptions().put(REPO_URL, instanceUrl);
}
public String getBranch() {
return (String) getOptions().get(BRANCH);
}
public void setBranch(String branch) {
getOptions().put(BRANCH, branch);
}
public String getPersonalAccessToken() {
return String.valueOf(getOptions().get(PERSONAL_ACCESS_TOKEN));
}
public void setPersonalAccessToken(String personalAccessToken) {
getOptions().put(PERSONAL_ACCESS_TOKEN, personalAccessToken);
}
@Override
public boolean equals(Object o) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubParsed.java
=====================================================
package com.capitalone.dashboard.model.webhook.github;
import com.capitalone.dashboard.misc.HygieiaException;
import java.net.MalformedURLException;
import java.net.URL;
public class GitHubParsed {
private String url;
private String apiUrl;
private String baseApiUrl;
private String graphQLUrl;
private String orgName;
private String repoName;
private static final String SEGMENT_API = "/api/v3/repos";
private static final String BASE_API = "/api/v3/";
private static final String PUBLIC_GITHUB_BASE_API = "api.github.com/";
private static final String PUBLIC_GITHUB_REPO_HOST = "api.github.com/repos";
private static final String PUBLIC_GITHUB_HOST_NAME = "github.com";
private static final String SEGMENT_GRAPHQL = "/api/graphql";
private static final String PUBLIC_GITHUB_GRAPHQL = "api.github.com/graphql";
public GitHubParsed(String url) throws MalformedURLException, HygieiaException {
this.url = url;
parse();
}
private void parse() throws MalformedURLException, HygieiaException {
if (url.endsWith(".git")) {
url = url.substring(0, url.lastIndexOf(".git"));
}
URL u = new URL(url);
String host = u.getHost();
String protocol = u.getProtocol();
String path = u.getPath();
String[] parts = path.split("/");
if (parts.length < 3) {
throw new HygieiaException("Bad github repo URL: " + url, HygieiaException.BAD_DATA);
}
orgName = parts[1];
repoName = parts[2];
if (host.startsWith(PUBLIC_GITHUB_HOST_NAME)) {
baseApiUrl = protocol + "://" + PUBLIC_GITHUB_BASE_API;
apiUrl = protocol + "://" + PUBLIC_GITHUB_REPO_HOST + path;
graphQLUrl = protocol + "://" + PUBLIC_GITHUB_GRAPHQL;
} else {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/webhook/github/MergeEvent.java
=====================================================
package com.capitalone.dashboard.model.webhook.github;
import java.util.Objects;
public class MergeEvent {
private String mergeSha;
private String gitRequestNumber;
private String mergeRef;
private String mergeAuthor;
private String mergeAuthorLDAPDN;
private long mergedAt;
public String getMergeSha() {
return mergeSha;
}
public void setMergeSha(String mergeSha) {
this.mergeSha = mergeSha;
}
public String getGitRequestNumber() {
return gitRequestNumber;
}
public void setGitRequestNumber(String gitRequestNumber) {
this.gitRequestNumber = gitRequestNumber;
}
public String getMergeRef() {
return mergeRef;
}
public void setMergeRef(String mergeRef) {
this.mergeRef = mergeRef;
}
public String getMergeAuthor() {
return mergeAuthor;
}
public void setMergeAuthor(String mergeAuthor) {
this.mergeAuthor = mergeAuthor;
}
public String getMergeAuthorLDAPDN() {
return mergeAuthorLDAPDN;
}
public void setMergeAuthorLDAPDN(String mergeAuthorLDAPDN) {
this.mergeAuthorLDAPDN = mergeAuthorLDAPDN;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/RallyFeatureType.java
=====================================================
package com.capitalone.dashboard.model;
public enum RallyFeatureType {
Feature(CollectorType.Feature);
private final CollectorType collectorType;
RallyFeatureType(CollectorType collectorType) {
this.collectorType = collectorType;
}
public static RallyFeatureType fromString(String value) {
for (RallyFeatureType rallyFeatureType : values()) {
if (rallyFeatureType.toString().equalsIgnoreCase(value)) {
return rallyFeatureType;
}
}
throw new IllegalArgumentException(value + " is not a valid RallyFeatureType.");
}
public CollectorType collectorType() {
return collectorType;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/BaseModel.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
/**
* Base class for all Mongo model classes that has an id property.
*/
public class BaseModel {
@Id
private ObjectId id;
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
/*
* Note:
*
* Having hashcode + equals is more complicated than simply comparing ObjectIds since
* it does not provide a way to properly compare models that have not been saved yet.
*/
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Build.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
/**
* The result of a Continuous Integration build execution. Typically produces binary artifacts.
* Often triggered by one or more SCM commits.
*
* Possible collectors:
* Hudson (in scope)
* Team City
* TFS
* Go
* Bamboo
* TravisCI
*
*/
@Document(collection="builds")
public class Build extends BaseModel {
private ObjectId collectorItemId;
private long timestamp;
private String number;
private String buildUrl;
private long startTime;
private long endTime;
private long duration;
private BuildStatus buildStatus;
private String startedBy;
private String log;
private List<RepoBranch> codeRepos = new ArrayList<>();
private List<SCM> sourceChangeSet = new ArrayList<>();
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public void setSourceChangeSet(List<SCM> sourceChangeSet) {
this.sourceChangeSet = sourceChangeSet;
}
public long getTimestamp() {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TestCaseStep.java
=====================================================
package com.capitalone.dashboard.model;
public class TestCaseStep {
/**
* Identifies this test case step in the source system
*/
private String id;
/**
* Description of the test case step that might make sense to a human
*/
private String description;
/**
* Test case duration in milliseconds
*/
private long duration;
/**
* Status of the test case step
*/
private TestCaseStatus status;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public long getDuration() {
return duration;
}
public void setDuration(long duration) {
this.duration = duration;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/GitRequest.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
@Document(collection="gitrequests")
public class GitRequest {
// fields added from SCM class that we are not extending anymore
private String scmUrl;
private String scmBranch;
private String scmRevisionNumber;
//squash merge commit may be different from pr commit
private String scmMergeEventRevisionNumber;
private String scmCommitLog;
private long scmCommitTimestamp;
private String scmAuthor;
private long numberOfChanges;
// fields added above are from SCM class that we are not extending anymore
@Id
private ObjectId id;
private String orgName;
private String repoName;
private String sourceRepo;
private String sourceBranch;
private String targetRepo;
private String targetBranch;
private String number;
@Indexed
private ObjectId collectorItemId;
private long updatedAt;
private long createdAt;
private long closedAt;
private String state;
private long mergedAt;
private String mergeAuthor;
private String mergeAuthorLDAPDN;
private long timestamp;
private long resolutiontime;
private String userId = null;
private String commentsUrl;
private String reviewCommentsUrl;
private List<Comment> comments;
private List<Review> reviews;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/DashboardType.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Defines the type of {@link Dashboard}.
*/
public enum DashboardType {
Product,
Team;
public static DashboardType fromString(String value){
for(DashboardType dashboardType : values()){
if(dashboardType.toString().equalsIgnoreCase(value)){
return dashboardType;
}
}
throw new IllegalArgumentException(value+" is not a valid DashboardType");
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Pipeline.java
=====================================================
package com.capitalone.dashboard.model;
import com.capitalone.dashboard.util.PipelineUtils;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.util.*;
/**
* Document containing the details of a Pipeline for a TeamDashboardCollectorItem
*/
@Document(collection="pipelines")
public class Pipeline extends BaseModel{
/**
* {@link CollectorItem} teamdashboard collector item id
* */
private ObjectId collectorItemId;
/**
* Map of environment names to EnvironmentStage objects. "Build" and "Commit" are
* treated as environments.
* */
@Field("stages")
private Map<String, EnvironmentStage> environmentStageMap = new HashMap<>();
/**
* not including this in the map above because the enum allows us to
* use ordinals to iterate through pipeline progression
* */
private Set<Build> failedBuilds = new HashSet<>();
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public Map<String, EnvironmentStage> getEnvironmentStageMap() {
return environmentStageMap;
}
public void setEnvironmentStageMap(Map<String, EnvironmentStage> environmentStageMap) {
this.environmentStageMap = environmentStageMap;
}
/**
* Adds a commit to a given environment. Will create a new stage if it doesn't exist.
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/GenericCollectorItem.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotNull;
/**
* A generic structure to hold a generic collector item info for a given tool that only that tool collector can
* decipher. This will be used in creating collector item via API for non-standard tools.
*/
@Document(collection = "generic_collector_items")
public class GenericCollectorItem extends BaseModel {
@NotNull
private String toolName;
@NotNull
private ObjectId collectorId;
@NotNull
private String rawData;
@NotNull
private long creationTime;
private long processTime;
@NotNull
private String source;
private ObjectId relatedCollectorItem; //To build relations if needed
private ObjectId buildId; //if started off by some build - connects to build collection
public ObjectId getBuildId() {
return buildId;
}
public void setBuildId(ObjectId buildId) {
this.buildId = buildId;
}
public ObjectId getRelatedCollectorItem() {
return relatedCollectorItem;
}
public void setRelatedCollectorItem(ObjectId relatedCollectorItem) {
this.relatedCollectorItem = relatedCollectorItem;
}
public long getCreationTime() {
return creationTime;
}
public void setCreationTime(long creationTime) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/UserRole.java
=====================================================
package com.capitalone.dashboard.model;
public enum UserRole {
ROLE_USER,
ROLE_ADMIN,
ROLE_API;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Stage.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.HashSet;
import java.util.Set;
public class Stage {
public Stage(){
}
public Stage(Set<PipelineCommit> commits){
this.commits = commits;
}
/** A collection that includes all commits ever to come into the stage */
private Set<PipelineCommit> commits = new HashSet<>();
public Set<PipelineCommit> getCommits() {
return commits;
}
public void setCommits(Set<PipelineCommit> commits) {
this.commits = commits;
}
public void addCommit(PipelineCommit commit){
this.commits.add(commit);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Team.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents a Tempo Team in JIRA.
*/
@Document(collection="team")
public class Team extends BaseModel {
private ObjectId collectorId;
@Indexed
private String teamId;
@Indexed
private String name;
private String changeDate;
private String assetState;
private String isDeleted;
private boolean enabled;
private String teamType;
private long lastCollected;
@Transient
private Collector collector;
public Collector getCollector() {
return collector;
}
public void setCollector(Collector collector) {
this.collector = collector;
}
public Team(String teamId, String name) {
this.teamId = (teamId != null ? teamId.trim() : "");
this.name = (name != null ? name.trim() : "");
}
public ObjectId getCollectorId() {
return collectorId;
}
public void setCollectorId(ObjectId collectorId) {
this.collectorId = collectorId;
}
public String getTeamId() {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TestCaseStatus.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Denotes the status of a given {@link TestCase}.
*/
public enum TestCaseStatus {
Success, Failure, Skipped, Unknown
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/relation/RelatedCollectorItem.java
=====================================================
package com.capitalone.dashboard.model.relation;
import com.capitalone.dashboard.model.BaseModel;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotNull;
@Document(collection = "related_items")
public class RelatedCollectorItem extends BaseModel{
@NotNull
private ObjectId left;
@NotNull
private ObjectId right;
@NotNull
private String source;
@NotNull
private String reason;
@NotNull
private long creationTime;
public ObjectId getLeft() {
return left;
}
public void setLeft(ObjectId left) {
this.left = left;
}
public ObjectId getRight() {
return right;
}
public void setRight(ObjectId right) {
this.right = right;
}
public long getCreationTime() {
return creationTime;
}
public void setCreationTime(long creationTime) {
this.creationTime = creationTime;
}
public String getSource() {
return source;
}
public void setSource(String source) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/ChangeOrder.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Objects;
@Document(collection="changeorder")
public class ChangeOrder extends BaseModel{
private ObjectId collectorItemId;
private Long timestamp;
private String changeOrderItem;
private String changeID;
private String category;
private String status;
private String approvalStatus;
private String initiatedBy;
private String assignedTo;
private String assignmentGroup;
private String changeCoordinator;
private String coordinatorPhone;
private Long plannedStart;
private Long plannedEnd;
private String reason;
private String phase;
private String riskAssessment;
private String priority;
private Long dateEntered;
private boolean open;
private String backoutDuration;
private Long closeTime;
private String extProjectRef;
private String rFCType2;
private String company;
private String title;
private String subcategory;
private String sLAAgreementID;
private String changeModel;
private String service;
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ");
public ObjectId getCollectorItemId() { return collectorItemId; }
public void setCollectorItemId(ObjectId collectorItemId) { this.collectorItemId = collectorItemId; }
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/FeatureIssueLink.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Represents an issue link of a jira story.
*/
public class FeatureIssueLink {
private String targetIssueKey;
private String targetIssueUri;
private String issueLinkName;
private String issueLinkType;
private String issueLinkDirection;
public String getTargetIssueKey() {
return targetIssueKey;
}
public void setTargetIssueKey(String targetIssueKey) {
this.targetIssueKey = targetIssueKey;
}
public String getTargetIssueUri() {
return targetIssueUri;
}
public void setTargetIssueUri(String targetIssueUri) {
this.targetIssueUri = targetIssueUri;
}
public String getIssueLinkName() {
return issueLinkName;
}
public void setIssueLinkName(String issueLinkName) {
this.issueLinkName = issueLinkName;
}
public String getIssueLinkType() {
return issueLinkType;
}
public void setIssueLinkType(String issueLinkType) {
this.issueLinkType = issueLinkType;
}
public String getIssueLinkDirection() {
return issueLinkDirection;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/PipelineStageType.java
=====================================================
package com.capitalone.dashboard.model;
public enum PipelineStageType {
BUILD, COMMIT, DEPLOY
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TestCaseConditionResult.java
=====================================================
package com.capitalone.dashboard.model;
public class TestCaseConditionResult {
private TestCaseStatus status;
private long duration;
public TestCaseStatus getStatus() {
return status;
}
public void setStatus(TestCaseStatus status) {
this.status = status;
}
public long getDuration() {
return duration;
}
public void setDuration(long duration) {
this.duration = duration;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Review.java
=====================================================
package com.capitalone.dashboard.model;
public class Review {
private String body;
private String state;
private String author;
private String authorLDAPDN;
private long createdAt;
private long updatedAt;
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getAuthorLDAPDN() {
return authorLDAPDN;
}
public void setAuthorLDAPDN(String authorLDAPDN) {
this.authorLDAPDN = authorLDAPDN;
}
public long getCreatedAt() {
return createdAt;
}
public void setCreatedAt(long createdAt) {
this.createdAt = createdAt;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Application.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.mapping.DBRef;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* The software application the team is developing and/or operating. Consists of one or more software
* components and may exist in one or more environments.
*/
public class Application {
private String name;
private String owner;
private String lineOfBusiness;
@DBRef
private List<Component> components = new ArrayList<>();
Application() {
}
public Application(String name, Component... componentsArray) {
this.name = name;
Collections.addAll(components, componentsArray);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String getLineOfBusiness() {
return lineOfBusiness;
}
public void setLineOfBusiness(String lineOfBusiness) {
this.lineOfBusiness = lineOfBusiness;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/ScopeOwner.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents a team in a content management system that works with features.
*
* Possible collectors: VersionOne PivotalTracker Rally Trello Jira
*
* @author kfk884
*
*/
@Document(collection = "scope-owner")
public class ScopeOwner extends CollectorItem {
private ObjectId collectorItemId;
@Indexed
private String teamId;
@Indexed
private String name;
private String changeDate;
private String assetState;
private String isDeleted;
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public String getTeamId() {
return this.teamId;
}
public void setTeamId(String teamId) {
this.teamId = teamId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getChangeDate() {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/PerformanceMetric.java
=====================================================
package com.capitalone.dashboard.model;
public class PerformanceMetric {
private String name;
private Object value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatLevel.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Enumerates the possible statuses.
*/
public enum LibraryPolicyThreatLevel {
Critical, High, Medium, Low, None;
public static LibraryPolicyThreatLevel fromString(String value){
for(LibraryPolicyThreatLevel threatLevel : values()){
if(threatLevel.toString().equalsIgnoreCase(value)){
return threatLevel;
}
}
throw new IllegalArgumentException(value+" is not a valid LibraryPolicyThreatLevel");
}
public static LibraryPolicyThreatLevel fromDouble(double value){
if ((value == 10)) return LibraryPolicyThreatLevel.Critical;
if ((value < 10.0) && (value >= 7.0)) return LibraryPolicyThreatLevel.High;
if ((value < 7.0) && (value >= 4.0)) return LibraryPolicyThreatLevel.Medium;
if ((value < 4.0) && (value > 0.0)) return LibraryPolicyThreatLevel.Low;
if (value == 0.0) return LibraryPolicyThreatLevel.None;
throw new IllegalArgumentException(value+" is not a valid LibraryPolicyThreatLevel");
}
public static LibraryPolicyThreatLevel fromInt(int value){
double dv = (double) value;
return fromDouble(dv);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CodeReposBuilds.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
@Document(collection = "code_repos_builds")
public class CodeReposBuilds extends BaseModel {
@Indexed(unique = true)
private String codeRepo;
private Set<ObjectId> buildCollectorItems = new HashSet<>();
@Indexed
private long timestamp;
public String getCodeRepo() {
return codeRepo.toLowerCase(Locale.US);
}
public void setCodeRepo(String codeRepo) {
this.codeRepo = codeRepo.toLowerCase(Locale.US);
}
public Set<ObjectId> getBuildCollectorItems() {
return buildCollectorItems;
}
public void setBuildCollectorItems(Set<ObjectId> buildCollectorItems) {
this.buildCollectorItems = buildCollectorItems;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/RepoBranch.java
=====================================================
package com.capitalone.dashboard.model;
import javax.validation.constraints.NotNull;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Locale;
public class RepoBranch {
private String url = "";
private String branch = "";
private RepoType type = RepoType.Unknown;
public enum RepoType {
SVN,
GIT,
Unknown;
public static com.capitalone.dashboard.model.RepoBranch.RepoType fromString(String value) {
if (value == null) return RepoType.Unknown;
for (com.capitalone.dashboard.model.RepoBranch.RepoType repoType : values()) {
if (repoType.toString().equalsIgnoreCase(value)) {
return repoType;
}
}
throw new IllegalArgumentException(value + " is not a valid RepoType.");
}
}
public RepoBranch(String url, String branch, RepoType repoType) {
this.url = url;
this.branch = branch;
this.type = repoType;
}
public RepoBranch() {
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url.toLowerCase(Locale.US);
}
public String getBranch() {
switch (this.getType()) {
case GIT: return getGITNormalizedBranch(branch);
case SVN: return branch;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/quality/FindBugsXmlReport.java
=====================================================
package com.capitalone.dashboard.model.quality;
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "BugCollection")
public class FindBugsXmlReport implements CodeQualityVisitee {
@Override
public void accept(CodeQualityVisitor visitor) {
visitor.visit(this);
}
@XmlElement(name = "file")
private List<BugFile> files;
public List<BugFile> getFiles() {
return files;
}
public void setFiles(List<BugFile> files) {
this.files = files;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class BugFile {
@XmlElement(name = "BugInstance")
private List<BugInstance> bugCollection;
public List<BugInstance> getBugCollection() {
return bugCollection;
}
public void setBugCollection(List<BugInstance> bugCollection) {
this.bugCollection = bugCollection;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class BugInstance {
@XmlAttribute
private String type;
@XmlAttribute
private BugPriority priority;
@XmlAttribute
private BugCategory category;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/quality/PmdReport.java
=====================================================
package com.capitalone.dashboard.model.quality;
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlRootElement(name="pmd")
@XmlAccessorType(XmlAccessType.FIELD)
public class PmdReport implements CodeQualityVisitee {
@XmlElement(name="file")
private List<PmdFile> files;
@Override
public void accept(CodeQualityVisitor visitor) {
visitor.visit(this);
}
public List<PmdFile> getFiles() {
return files;
}
public void setFiles(List<PmdFile> files) {
this.files = files;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class PmdFile{
@XmlElement(name="violation")
private List<PmdViolation> violations;
public List<PmdViolation> getViolations() {
return violations;
}
public void setViolations(List<PmdViolation> violations) {
this.violations = violations;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class PmdViolation {
@XmlAttribute(name="priority")
private int priority;
public int getPriority() {
return priority;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/quality/JacocoXmlReport.java
=====================================================
package com.capitalone.dashboard.model.quality;
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "report")
public class JacocoXmlReport implements CodeQualityVisitee{
@XmlElement(name="counter")
private List<Counter> counters;
@Override
public void accept(CodeQualityVisitor visitor) {
visitor.visit(this);
}
public List<Counter> getCounters() {
return counters;
}
public void setCounters(List<Counter> counters) {
this.counters = counters;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class Counter {
@XmlAttribute(name="type")
private CounterType type;
@XmlAttribute(name="missed")
private int missed;
@XmlAttribute(name="covered")
private int covered;
public int getMissed() {
return missed;
}
public void setMissed(int missed) {
this.missed = missed;
}
public int getCovered() {
return covered;
}
public void setCovered(int covered) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/quality/ArtifactType.java
=====================================================
package com.capitalone.dashboard.model.quality;
public enum ArtifactType {
junit, findbugs, jacoco, pmd, checkstyle;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitor.java
=====================================================
package com.capitalone.dashboard.model.quality;
import com.capitalone.dashboard.model.CodeQuality;
public interface CodeQualityVisitor {
CodeQuality produceResult();
void visit(JunitXmlReport junitXmlReport);
void visit(FindBugsXmlReport findBugsXmlReport);
void visit(JacocoXmlReport jacocoXmlReport);
void visit(PmdReport pmdReport);
void visit(CheckstyleReport checkstyleReport);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitee.java
=====================================================
package com.capitalone.dashboard.model.quality;
public interface CodeQualityVisitee {
void accept(CodeQualityVisitor visitor);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/quality/JunitXmlReport.java
=====================================================
package com.capitalone.dashboard.model.quality;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* Contains the results of exexuting a testsuite
* <p>
* <p>Java class for testsuite complex type.
* <p>
* <p>The following schema fragment specifies the expected content contained within this class.
* <p>
* <pre>
* <complexType name="testsuite">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="properties">
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="property" maxOccurs="unbounded" minOccurs="0">
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <attribute name="name" use="required">
* <simpleType>
* <restriction base="{http://www.w3.org/2001/XMLSchema}token">
* <minLength value="1"/>
* </restriction>
* </simpleType>
* </attribute>
* <attribute name="value" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
* </restriction>
* </complexContent>
* </complexType>
* </element>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </element>
* <element name="testcase" maxOccurs="unbounded" minOccurs="0">
* <complexType>
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/quality/CheckstyleReport.java
=====================================================
package com.capitalone.dashboard.model.quality;
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlRootElement(name="checkstyle")
@XmlAccessorType(XmlAccessType.FIELD)
public class CheckstyleReport implements CodeQualityVisitee {
@XmlElement(name="file")
private List<CheckstyleFile> files;
@Override
public void accept(CodeQualityVisitor visitor) {
visitor.visit(this);
}
public List<CheckstyleFile> getFiles() {
return files;
}
public void setFiles(List<CheckstyleFile> files) {
this.files = files;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class CheckstyleFile {
@XmlElement(name="error")
private List<CheckstyleError> errors;
public List<CheckstyleError> getErrors() {
return errors;
}
public void setErrors(List<CheckstyleError> errors) {
this.errors = errors;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class CheckstyleError {
@XmlAttribute(name="severity")
private CheckstyleSeverity severity;
public CheckstyleSeverity getSeverity() {
return severity;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/UserStory.java
=====================================================
package com.capitalone.dashboard.model;
public class UserStory {
private String storyId;
private String storyName;
private String ownerName;
private String storyUrl;
private long lastUpdateDate;
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public long getLastUpdateDate() {
return lastUpdateDate;
}
public void setLastUpdateDate(long lastUpdateDate) {
this.lastUpdateDate = lastUpdateDate;
}
public String getStoryUrl() {
return storyUrl;
}
public void setStoryUrl(String storyUrl) {
this.storyUrl = storyUrl;
}
public String getStoryId() {
return storyId;
}
public void setStoryId(String storyId) {
this.storyId = storyId;
}
public String getStoryName() {
return storyName;
}
public void setStoryName(String storyName) {
this.storyName = storyName;
}
public String getOwnerName() {
return ownerName;
}
public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/StandardWidget.java
=====================================================
package com.capitalone.dashboard.model;
import org.apache.commons.collections.MapUtils;
import org.bson.types.ObjectId;
import java.util.HashMap;
import java.util.Map;
public class StandardWidget {
private CollectorType collectorType;
private static final String REPO = "repo";
private static final String BUILD = "build";
private static final String CODEQUALITY = "codeanalysis";
private static final String FEATURE = "feature";
private static final String DEPLOY = "deploy";
private static final String REPO_ID = "repo0";
private static final String BUILD_ID = "build0";
private static final String CODEQUALITY_ID = "codeanalysis0";
private static final String FEATURE_ID = "feature0";
private static final String DEPLOY_ID = "deploy0";
private Map<String, Object> options = new HashMap<>();
private String name;
private ObjectId componentId;
public StandardWidget(CollectorType collectorType, ObjectId componentId) {
this.collectorType = collectorType;
this.componentId = componentId;
setNameAndId();
}
/**
* Setup the standard name, id etc for the widget
*/
private void setNameAndId() {
switch (collectorType) {
case SCM:
name = REPO;
options.put("id", REPO_ID);
break;
case Build:
name = BUILD;
options.put("id", BUILD_ID);
options.put("buildDurationThreshold", 3);
options.put("consecutiveFailureThreshold", 5);
break;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/BuildStatus.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Enumeration of valid build statuses.
*/
public enum BuildStatus {
Success,
Failure,
Unstable,
Aborted,
InProgress,
Unknown;
public static BuildStatus fromString(String value) {
for (BuildStatus buildStatus : values()) {
if (buildStatus.toString().equalsIgnoreCase(value)) {
return buildStatus;
}
}
throw new IllegalArgumentException(value + " is not a valid BuildStatus.");
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CloudVirtualNetwork.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.hibernate.validator.constraints.NotBlank;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@Document(collection = "cloud_virtual_network")
public class CloudVirtualNetwork extends BaseModel{
@Indexed
@NotNull
@NotBlank
private String virtualNetworkId;
@NotNull
@NotBlank
private String accountNumber;
private ObjectId collectorItemId;
private String cidrBlock;
private boolean defaultNetwork;
private String state; //pending, available etc.
private Map<String, String> tags = new HashMap<>();
private long creationDate;
private long lastUpdateDate;
public String getVirtualNetworkId() {
return virtualNetworkId;
}
public void setVirtualNetworkId(String virtualNetworkId) {
this.virtualNetworkId = virtualNetworkId;
}
public String getCidrBlock() {
return cidrBlock;
}
public void setCidrBlock(String cidrBlock) {
this.cidrBlock = cidrBlock;
}
public boolean isDefaultNetwork() {
return defaultNetwork;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/EnvironmentStage.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Class representing any stage of a {@link Pipeline}
*/
public class EnvironmentStage extends Stage{
/** {@link BinaryArtifact} The last artifact to be processed */
private BinaryArtifact lastArtifact;
public BinaryArtifact getLastArtifact() {
return lastArtifact;
}
public void setLastArtifact(BinaryArtifact lastArtifact) {
this.lastArtifact = lastArtifact;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/RallyBurnDownData.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="rally_burndown")
public class RallyBurnDownData extends BaseModel{
public static final String ITERATION_TO_DO_HOURS = "iterationToDoHours";
public static final String ACCEPTED_POINTS = "acceptedPoints";
public static final String ITERATION_DATE = "iterationDate";
private List<Map<String,String>> burnDownData;
private String iterationId;
private String projectName;
private String iterationName;
private String projectId;
private Double totalEstimate;
private long lastUpdated;
public long getLastUpdated() {
return lastUpdated;
}
public void setLastUpdated(long timestamp) {
this.lastUpdated = timestamp;
}
public List<Map<String, String>> getBurnDownData() {
if(burnDownData==null){
burnDownData = new ArrayList<>();
}
return burnDownData;
}
public void setBurnDownData(List<Map<String, String>> burnDownData) {
this.burnDownData = burnDownData;
}
public String getIterationId() {
return iterationId;
}
public void setIterationId(String iterationId) {
this.iterationId = iterationId;
}
public String getProjectName() {
return projectName;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/PerformanceMetricStatus.java
=====================================================
package com.capitalone.dashboard.model;
public enum PerformanceMetricStatus {
OK, WARNING, CRITICAL
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyType.java
=====================================================
package com.capitalone.dashboard.model;
public enum LibraryPolicyType {
Security,
License,
Other;
public static LibraryPolicyType fromString(String value) {
for (LibraryPolicyType policyType : values()) {
if (policyType.toString().equalsIgnoreCase(value)) {
return policyType;
}
}
return Other;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/ScoreDisplayType.java
=====================================================
package com.capitalone.dashboard.model;
public enum ScoreDisplayType {
HEADER,
WIDGET;
public static ScoreDisplayType fromString(String value){
for(ScoreDisplayType scoreDisplay : values()){
if(scoreDisplay.toString().equalsIgnoreCase(value)){
return scoreDisplay;
}
}
return ScoreDisplayType.HEADER;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/RequestLog.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "requests")
public class RequestLog extends BaseModel {
private String client;
private String endpoint;
private String method;
private String parameter;
private long requestSize;
private String requestContentType;
private Object requestBody;
private long responseSize;
private String responseContentType;
private Object responseBody;
private int responseCode;
private long timestamp;
private long responseTime;
public String getClient() {
return client;
}
public void setClient(String client) {
this.client = client;
}
public String getEndpoint() {
return endpoint;
}
public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getParameter() {
return parameter;
}
public void setParameter(String parameter) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Configuration.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.Base64;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "configuration")
public class Configuration extends BaseModel {
private final static String PREFIX = "BASE64:";
public Configuration(String collectorName, Set<Map<String, String>> info) {
super();
this.collectorName = collectorName;
this.info = info;
}
public Set<Map<String, String>> decryptOrEncrptInfo() {
for (Map<String, String> info : info) {
if (!info.isEmpty()) {
String password = info.get("password").toString();
if(password.contains(PREFIX)){
Base64.Decoder decoder = Base64.getDecoder();
password = new String(decoder.decode(password.replaceFirst(PREFIX, "").trim()));
} else {
Base64.Encoder encoder = Base64.getEncoder();
password = PREFIX + encoder.encodeToString(password.getBytes());
}
info.replace("password", password);
}
}
return info;
}
public Configuration() {
}
private String collectorName;
private Set<Map<String, String>> info = new HashSet<>();
public String getCollectorName() {
return collectorName;
}
public void setCollectorName(String collectorName) {
this.collectorName = collectorName;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Collector.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* The collectors that have been registered in the given Dashboard app instance.
*/
@Document(collection = "collectors")
public class Collector extends BaseModel {
private String name;
private CollectorType collectorType;
private boolean enabled;
private boolean online;
private List<CollectionError> errors = new ArrayList<>();
//Every collector will have its own set of required and all fields depending upon the specific tool.
private Map<String, Object> uniqueFields = new HashMap<>();
private Map<String, Object> allFields = new HashMap<>();
private long lastExecuted;
private List<String> searchFields = Arrays.asList("description");
private Map<String, Object> properties = new HashMap<>(); //general purpose name-value properties
public Collector() {
}
public Collector(String name, CollectorType collectorType) {
this.name = name;
this.collectorType = collectorType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public CollectorType getCollectorType() {
return collectorType;
}
public void setCollectorType(CollectorType collectorType) {
this.collectorType = collectorType;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/NameValue.java
=====================================================
package com.capitalone.dashboard.model;
public class NameValue {
private String name;
private String value;
public NameValue () {
}
public NameValue(String name, String value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
NameValue nameValue = (NameValue) o;
if (!name.equals(nameValue.name)) return false;
return value.equals(nameValue.value);
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + value.hashCode();
return result;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CodeQuality.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashSet;
import java.util.Set;
/**
* Represents code quality at a specific point in time. This could include
* a unit test run, a security scan, static analysis, functional tests,
* manual acceptance tests or bug reports.
*
* Possible Collectors:
* Sonar (in scope)
* Fortify
* ALM
* Various build system test results
*
*/
@Document(collection="code_quality")
public class CodeQuality extends BaseModel {
private ObjectId collectorItemId;
private long timestamp;
private String name;
private String url;
private CodeQualityType type;
private String version;
private ObjectId buildId;
private Set<CodeQualityMetric> metrics = new HashSet<>();
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getName() {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CodeQualityMetricStatus.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Enumerates the possible {@link CodeQualityMetric} statuses.
*/
public enum CodeQualityMetricStatus {
Ok, Warning, Alert, Error
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/RallyStoryStages.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.List;
public class RallyStoryStages {
private String backlog;
private String defined;
private String inProgress;
private String completed;
private String accepted;
private String defects;
private List<UserStory> userStories;
public List<UserStory> getUserStories() {
return userStories;
}
public void setUserStories(List<UserStory> userStories) {
this.userStories = userStories;
}
public String getDefects() {
return defects;
}
public void setDefects(String defects) {
this.defects = defects;
}
public String getBacklog() {
return backlog;
}
public void setBacklog(String backlog) {
this.backlog = backlog;
}
public String getDefined() {
return defined;
}
public void setDefined(String defined) {
this.defined = defined;
}
public String getInProgress() {
return inProgress;
}
public void setInProgress(String inProgress) {
this.inProgress = inProgress;
}
public String getCompleted() {
return completed;
}
public void setCompleted(String completed) {
this.completed = completed;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TeamMember.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.List;
/**
* Class representing any team members of a {@link TeamInventory}
*/
public class TeamMember {
private String orgId;
private String allocation;
private String teamId;
private String name;
private List<TeamLevelDetails> teams;
private String regOrTemp ;
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getAllocation() {
return allocation;
}
public void setAllocation(String allocation) {
this.allocation = allocation;
}
public String getTeamId() {
return teamId;
}
public void setTeamId(String teamId) {
this.teamId = teamId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CollectorItem.java
=====================================================
package com.capitalone.dashboard.model;
import org.apache.commons.collections.CollectionUtils;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* <p>
* Represents a unique collection in an external tool. For example, for a CI tool
* the collector item would be a Job. For a project management tool, the collector item
* might be a Scope.
* </p>
* <p>
* Each {@link Collector} is responsible for specifying how it's {@link CollectorItem}s are
* uniquely identified by storing key/value pairs in the options Map. The description field will
* be visible to users in the UI to aid in selecting the correct {@link CollectorItem} for their dashboard.
* Ideally, the description will be unique for a given {@link Collector}.
* </p>
*/
@Document(collection="collector_items")
public class CollectorItem extends BaseModel {
private String description;
private String niceName;
private String environment;
private boolean enabled;
private List<CollectionError> errors = new ArrayList<>();
private boolean pushed;
private ObjectId collectorId;
private long lastUpdated;
private Map<String,Object> options = new HashMap<>();
@Transient
private Collector collector;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TeamLevelDetails.java
=====================================================
package com.capitalone.dashboard.model;
public class TeamLevelDetails extends CollectorItem {
public String getInstanceUrl() {
return (String) getOptions().get("instanceUrl");
}
public void setInstanceUrl(String url) {
getOptions().put("instanceUrl", url);
}
public String getTeamId() {
return (String) getOptions().get("teamId");
}
public void setTeamId(String teamId) {
getOptions().put("teamId", teamId);
}
public String getTeamName() {
return (String) getOptions().get("teamName");
}
public void setTeamName(String teamName) {
getOptions().put("teamName", teamName);
}
public String getUrl() {
return (String) getOptions().get("url");
}
public void setUrl(String url) {
getOptions().put("url", url);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TeamLevelDetails that = (TeamLevelDetails) o;
return getTeamId().equals(that.getTeamId()) && getTeamName().equals(that.getTeamName());
}
@Override
public int hashCode() {
int result = getTeamId().hashCode();
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyResult.java
=====================================================
package com.capitalone.dashboard.model;
import org.apache.commons.collections.CollectionUtils;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@Document(collection = "library_policy")
public class LibraryPolicyResult extends BaseModel {
private ObjectId collectorItemId;
private long timestamp;
private long evaluationTimestamp;
private Map<LibraryPolicyType, Set<Threat>> threats = new HashMap<>();
private String reportUrl;
private Integer totalComponentCount;
private Integer knownComponentCount;
private List<PolicyScanMetric> policyAlert = new ArrayList<>();
private ObjectId buildId;
public static class Threat {
LibraryPolicyThreatLevel level;
List<String> components = new ArrayList<>();
int count;
private Map<LibraryPolicyThreatDisposition, Integer> dispositionCounts = new HashMap<>();
public Threat(LibraryPolicyThreatLevel level, int count) {
this.level = level;
this.count = count;
}
public LibraryPolicyThreatLevel getLevel() {
return level;
}
public void setLevel(LibraryPolicyThreatLevel level) {
this.level = level;
}
public int getCount() {
return count;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Performance.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashMap;
import java.util.Map;
@Document(collection="performance")
public class Performance extends BaseModel{
private ObjectId collectorItemId;
private long timestamp;
private String url;
private PerformanceType type;
private String version;
private ObjectId executionId;
private String targetAppName;
private String targetEnvName;
private Map<String,Object> metrics = new HashMap<>();
public Map<String,Object> getMetrics() {
return metrics;
}
public void setMetrics(Map<String,Object> metrics) {
this.metrics = metrics;
}
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Component.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* A self-contained, independently deployable piece of the larger application. Each component of an application
* has a different source repo, build job, deploy job, etc.
*
*/
@Document(collection="components")
public class Component extends BaseModel {
private String name; // must be unique to the application
private String owner;
private Map<CollectorType, List<CollectorItem>> collectorItems = new HashMap<>();
public Component() {
}
public Component(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public Map<CollectorType, List<CollectorItem>> getCollectorItems() {
return collectorItems;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/StoryIndicator.java
=====================================================
package com.capitalone.dashboard.model;
public class StoryIndicator {
private String storyId;
private String storyNumber;
private String storyName;
private String storyStatus;
private String storyState;
private String storyType;
private String epicNumber;
private String epicName;
private String projectName;
private String teamName;
private String sprintName;
public String getStoryId() {
return storyId;
}
public void setStoryId(String storyId) {
this.storyId = storyId;
}
public String getStoryNumber() {
return storyNumber;
}
public void setStoryNumber(String storyNumber) {
this.storyNumber = storyNumber;
}
public String getStoryName() {
return storyName;
}
public void setStoryName(String storyName) {
this.storyName = storyName;
}
public String getStoryStatus() {
return storyStatus;
}
public void setStoryStatus(String storyStatus) {
this.storyStatus = storyStatus;
}
public String getStoryState() {
return storyState;
}
public void setStoryState(String storyState) {
this.storyState = storyState;
}
public String getStoryType() {
return storyType;
}
public void setStoryType(String storyType) {
this.storyType = storyType;
}
public String getEpicNumber() {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/PipelineStage.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.Locale;
public final class PipelineStage {
public static final PipelineStage COMMIT = new PipelineStage("Commit", PipelineStageType.COMMIT);
public static final PipelineStage BUILD = new PipelineStage("Build", PipelineStageType.BUILD);
private final String name;
private final PipelineStageType type;
private PipelineStage(String name, PipelineStageType type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public PipelineStageType getType() {
return type;
}
public static PipelineStage valueOf(String name) {
if (name == null) {
throw new IllegalArgumentException();
}
if (COMMIT.name.equalsIgnoreCase(name)) {
return COMMIT;
} else if (BUILD.name.equalsIgnoreCase(name)) {
return BUILD;
} else {
return new PipelineStage(name, PipelineStageType.DEPLOY);
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.toLowerCase(Locale.getDefault()).hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
return result;
}
@SuppressWarnings("PMD.SimplifyBooleanReturns")
@Override
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Dashboard.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
/**
* A collection of widgets, collectors and application components that represent a software
* project under development and/or in production use.
*
*/
@Document(collection="dashboards")
public class Dashboard extends BaseModel {
private String template;
//NOTE Mongodb treats strings as different if they have different case
@Indexed(unique=true)
private String title;
private List<Widget> widgets = new ArrayList<>();
// multiple owner references for backwards compatibility
// TODO: remove once impacts of breaking change are assessed
private String owner;
private List<Owner> owners = new ArrayList<Owner>();
private DashboardType type;
private Application application;
private String configurationItemBusServName;
private String configurationItemBusAppName;
private boolean validServiceName;
private boolean validAppName;
private boolean remoteCreated;
//Enable/Disable scoring for the dashboard
private boolean scoreEnabled;
//Display position for score.
//Default to HEADER
private ScoreDisplayType scoreDisplay = ScoreDisplayType.HEADER;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/ServiceAccount.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="service_accounts")
public class ServiceAccount extends BaseModel {
private String serviceAccountName;
private String fileNames;
public ServiceAccount(String serviceAccountName, String fileNames) {
this.serviceAccountName = serviceAccountName;
this.fileNames = fileNames;
}
public String getServiceAccountName() {
return serviceAccountName;
}
public void setServiceAccountName(String serviceAccountName) {
this.serviceAccountName = serviceAccountName;
}
public String getFileNames() {
return fileNames;
}
public void setFileNames(String fileNames) {
this.fileNames = fileNames;
}
@Override
public String toString() {
return "ServiceAccount [serviceAccount=" + serviceAccountName + ", fileNames=" + fileNames + "]";
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Commit.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* A specific commit in a version control repository.
*
* Possible collectors:
* Subversion (in scope)
* Git (in scope)
* GitHub
* TFS
* BitBucket
* Unfuddle
*
*/
@Document(collection="commits")
@CompoundIndexes({
@CompoundIndex(name = "unique_scm_key", def = "{'collectorItemId' : 1, 'scmRevisionNumber': 1}")
})
public class Commit extends SCM {
@Id
private ObjectId id;
@Indexed
private ObjectId collectorItemId;
private long timestamp;
private boolean firstEverCommit;
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/PipelineCommit.java
=====================================================
package com.capitalone.dashboard.model;
public class PipelineCommit extends SCM{
public PipelineCommit() {
}
public PipelineCommit(long timestamp) {
this.timestamp = timestamp;
}
public PipelineCommit(SCM scm, long timestamp){
super(scm);
this.timestamp = timestamp;
}
private long timestamp;
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((scmRevisionNumber == null) ? 0 : scmRevisionNumber.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PipelineCommit other = (PipelineCommit) obj;
if (scmRevisionNumber == null) {
if (other.scmRevisionNumber != null)
return false;
} else if (!scmRevisionNumber.equals(other.scmRevisionNumber))
return false;
return true;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TestSuiteType.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Denotes the type of tests in a given {@link TestSuite}.
*/
public enum TestSuiteType {
Unit, Functional, Regression, Performance, Integration, Security, Manual;
public static TestSuiteType fromString(String value) {
for (TestSuiteType type : values()) {
if (type.toString().equalsIgnoreCase(value)) {
return type;
}
}
throw new IllegalArgumentException(value + " is not a valid TestSuiteType.");
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/AuditResult.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashMap;
import java.util.Map;
@Document(collection = "audit_results")
public class AuditResult extends BaseModel {
private ObjectId dashboardId;
private String dashboardTitle;
private String lineOfBusiness;
private String configItemBusServName;
private String configItemBusAppName;
private String configItemBusServOwner;
private String configItemBusAppOwner;
private AuditType auditType;
private String auditTypeStatus;
private String auditStatus;
private String url;
private String auditDetails;
private Map traceability;
private long timestamp;
private Map<String, Object> options = new HashMap<>();
public AuditResult() { }
@SuppressWarnings("PMD.ExcessiveParameterList")
public AuditResult(ObjectId dashboardId, String dashboardTitle, String lineOfBusiness, String configItemBusServName,
String configItemBusAppName, String configItemBusServOwner, String configItemBusAppOwner, AuditType auditType,
String auditTypeStatus, String auditStatus, String auditDetails, String url, Map traceability, long timestamp) {
this.dashboardId = dashboardId;
this.dashboardTitle = dashboardTitle;
this.lineOfBusiness = lineOfBusiness;
this.configItemBusServName = configItemBusServName;
this.configItemBusAppName = configItemBusAppName;
this.configItemBusServOwner = configItemBusServOwner;
this.configItemBusAppOwner = configItemBusAppOwner;
this.auditType = auditType;
this.auditTypeStatus = auditTypeStatus;
this.auditStatus = auditStatus;
this.url = url;
this.auditDetails = auditDetails;
this.traceability = traceability;
this.timestamp = timestamp;
}
@SuppressWarnings("PMD.ExcessiveParameterList")
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CollectorItemConfigHistory.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashMap;
import java.util.Map;
@Document(collection="collitem_cfghist")
public class CollectorItemConfigHistory extends BaseModel {
private ObjectId collectorItemId;
private long timestamp;
private ConfigHistOperationType operation;
private String userName;
private String userID;
private Map<String, Object> changeMap = new HashMap<>();
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public ConfigHistOperationType getOperation() {
return operation;
}
public void setOperation(ConfigHistOperationType operation) {
this.operation = operation;
}
public Map<String, Object> getChangeMap() {
return changeMap;
}
public void setChangeMap(Map<String, Object> changeMap) {
this.changeMap = changeMap;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/PerformanceType.java
=====================================================
package com.capitalone.dashboard.model;
public enum PerformanceType {
ApplicationPerformance(CollectorType.AppPerformance),
InfrastructurePerformance(CollectorType.InfraPerformance);
private final CollectorType collectorType;
PerformanceType(CollectorType collectorType) {
this.collectorType = collectorType;
}
public static PerformanceType fromString(String value) {
for (PerformanceType performanceType : values()) {
if (performanceType.toString().equalsIgnoreCase(value)) {
return performanceType;
}
}
throw new IllegalArgumentException(value + " is not a valid PerformanceType.");
}
public CollectorType collectorType() {
return collectorType;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Authentication.java
=====================================================
package com.capitalone.dashboard.model;
import com.google.common.hash.Hashing;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.nio.charset.StandardCharsets;
/**
* This class serves as the model for storing credential used for login & Signup.
*/
@Document(collection = "authentication")
public class Authentication extends BaseModel {
static final String HASH_PREFIX = "sha512:";
@Indexed(unique = true)
private String username;
private String password;
public Authentication(String username, String password) {
this.username = username;
this.password = hash(password);
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = hash(password);
}
static String hash(String password) {
if (!password.startsWith(HASH_PREFIX)) {
return HASH_PREFIX + Hashing.sha512().hashString(password, StandardCharsets.UTF_8).toString();
}
return password;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CodeQualityType.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Enumerates the possible {@link CodeQuality} types.
*/
public enum CodeQualityType {
StaticAnalysis(CollectorType.CodeQuality),
SecurityAnalysis(CollectorType.StaticSecurityScan);
private final CollectorType collectorType;
CodeQualityType(CollectorType collectorType) {
this.collectorType = collectorType;
}
public static CodeQualityType fromString(String value) {
for (CodeQualityType qualityType : values()) {
if (qualityType.toString().equalsIgnoreCase(value)) {
return qualityType;
}
}
throw new IllegalArgumentException(value + " is not a valid CodeQualityType.");
}
public CollectorType collectorType() {
return collectorType;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CloudInstance.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* Represents an EC2 instance from AWS
*/
@Document(collection = "cloud_instance")
public class CloudInstance extends BaseModel{
@Indexed
private String instanceId;
@Indexed
private String accountNumber;
private String instanceType;
private String imageId;
private long imageExpirationDate;
private boolean imageApproved;
private String instanceOwner;
private boolean isMonitored;
private String privateDns;
private String privateIp;
private String publicDns;
private String publicIp;
private String subnetId;
private String virtualNetworkId;
private int age;
private String status;
private boolean isStopped;
private boolean isTagged;
private double cpuUtilization;
private long lastUpdatedDate;
private List<String> securityGroups = new ArrayList<>();
private List<NameValue> tags = new ArrayList<>();
private double networkIn;
private double networkOut;
private double diskRead;
private double diskWrite;
private String rootDeviceName;
private String autoScaleName;
private String lastAction;
public String getInstanceId() {
return instanceId;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/MaturityModel.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "maturity_model")
public class MaturityModel {
@Indexed
private String profile;
private String rules;
public String getProfile() {
return profile;
}
public void setProfile(String profile) {
this.profile = profile;
}
public String getRules() {
return rules;
}
public void setRules(String rules) {
this.rules = rules;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreTypeValue.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Score Value with Type Details
*/
public class ScoreTypeValue {
private ScoreType scoreType = ScoreType.value_percent;
private Double scoreValue;
//Propagate the score
private PropagateType propagate = PropagateType.no;
public ScoreTypeValue() {}
public static ScoreTypeValue noScore() {
ScoreTypeValue scoreTypeValue = new ScoreTypeValue();
scoreTypeValue.setScoreType(ScoreType.no_score);
return scoreTypeValue;
}
public static ScoreTypeValue zeroScore() {
ScoreTypeValue scoreTypeValue = new ScoreTypeValue();
scoreTypeValue.setScoreType(ScoreType.zero_score);
return scoreTypeValue;
}
public ScoreTypeValue(Double scoreValue) {
this.scoreValue = scoreValue;
}
public static ScoreTypeValue cloneScoreTypeValue(ScoreTypeValue scoreTypeValue) {
if (null == scoreTypeValue) {
return null;
}
ScoreTypeValue scoreTypeValueClone = new ScoreTypeValue();
scoreTypeValueClone.setScoreType(scoreTypeValue.getScoreType());
scoreTypeValueClone.setScoreValue(scoreTypeValue.getScoreValue());
scoreTypeValueClone.setPropagate(scoreTypeValue.getPropagate());
return scoreTypeValueClone;
}
public ScoreType getScoreType() {
return scoreType;
}
public boolean isNoScore() {
return scoreType == ScoreType.no_score;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreComponentSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Score Settings for a Component
*/
public class ScoreComponentSettings {
//If component is disabled, this can be set true
private boolean disabled = false;
//Weight for component in score (0-100)
private int weight = 0;
//Score Criterias for component
private ScoreCriteria criteria;
public static ScoreComponentSettings cloneScoreComponentSettings(ScoreComponentSettings scoreComponentSettings) {
if (null == scoreComponentSettings) {
return null;
}
ScoreComponentSettings scoreComponentSettingsClone = new ScoreComponentSettings();
copyScoreComponentSettings(scoreComponentSettings, scoreComponentSettingsClone);
return scoreComponentSettingsClone;
}
public static void copyScoreComponentSettings(ScoreComponentSettings from, ScoreComponentSettings to) {
if (null == from || null == to) {
return;
}
to.setDisabled(from.isDisabled());
to.setWeight(from.getWeight());
ScoreCriteria criteria = from.getCriteria();
if (null == criteria) {
return;
}
to.setCriteria(
ScoreCriteria.cloneScoreCriteria(criteria)
);
}
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
public int getWeight() {
return weight;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreType.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Score Type
*/
public enum ScoreType {
//When Type is no_score component is not considered for scoring
no_score,
//When Type is zero_score component component score is `0`
zero_score,
//When Type is value_percent component score is a defined value
value_percent
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreThresholdSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Score Threshold Settings
*/
public class ScoreThresholdSettings {
//Compare with these operators
public enum ComparatorType {
equals,
less,
greater,
less_or_equal,
greater_or_equal
}
//The value can be of type percent for percent of days, Or days for number of days
public enum ValueType {
percent,
days
}
private ComparatorType comparator = ComparatorType.less_or_equal;
private ValueType type = ValueType.percent;
//If the threshold is met set the score
private ScoreTypeValue score;
//Number of days to check for while applying threshold
private Integer numDaysToCheck;
//Value to compare
private Double value;
public static ScoreThresholdSettings cloneScoreThresholdSettings(ScoreThresholdSettings scoreThresholdSettings) {
if (null == scoreThresholdSettings) {
return scoreThresholdSettings;
}
ScoreThresholdSettings scoreThresholdSettingsClone = new ScoreThresholdSettings();
scoreThresholdSettingsClone.setComparator(scoreThresholdSettings.getComparator());
scoreThresholdSettingsClone.setType(scoreThresholdSettings.getType());
scoreThresholdSettingsClone.setValue(scoreThresholdSettings.getValue());
scoreThresholdSettingsClone.setNumDaysToCheck(scoreThresholdSettings.getNumDaysToCheck());
scoreThresholdSettingsClone.setScore(
ScoreTypeValue.cloneScoreTypeValue(scoreThresholdSettings.getScore())
);
return scoreThresholdSettingsClone;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteriaSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.score.ScoreValueType;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "score_criteria_settings")
public class ScoreCriteriaSettings extends BaseModel {
//Max Score
private int maxScore;
//Build Score Settings
private BuildScoreSettings build;
//Quality Score Settings
private QualityScoreSettings quality;
//Deploy Score Settings
private DeployScoreSettings deploy;
//SCM Score Settings
private ScmScoreSettings scm;
//Alert Score Component Settings
private ComponentAlert componentAlert;
//Score can be calculated for types defined in ScoreValueType
private ScoreValueType type = ScoreValueType.DASHBOARD;
//Time when score was calculated
private long timestamp;
public int getMaxScore() {
return maxScore;
}
public void setMaxScore(int maxScore) {
this.maxScore = maxScore;
}
public BuildScoreSettings getBuild() {
return build;
}
public void setBuild(BuildScoreSettings build) {
this.build = build;
}
public QualityScoreSettings getQuality() {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScmScoreSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Bean to hold score settings specific to scm
*/
public class ScmScoreSettings extends ScoreComponentSettings {
public static final int SCM_NUM_OF_DAYS = 14;
private ScoreComponentSettings commitsPerDay;
private int numberOfDays = SCM_NUM_OF_DAYS;
public static ScmScoreSettings cloneScmScoreSettings(ScmScoreSettings scmScoreSettings) {
if (null == scmScoreSettings) {
return null;
}
ScmScoreSettings scmScoreSettingsClone = new ScmScoreSettings();
ScoreComponentSettings.copyScoreComponentSettings(scmScoreSettings, scmScoreSettingsClone);
scmScoreSettingsClone.setNumberOfDays(
scmScoreSettings.getNumberOfDays()
);
scmScoreSettingsClone.setCommitsPerDay(
ScoreComponentSettings.cloneScoreComponentSettings(scmScoreSettings.getCommitsPerDay())
);
return scmScoreSettingsClone;
}
public int getNumberOfDays() {
return numberOfDays;
}
public void setNumberOfDays(int numberOfDays) {
this.numberOfDays = numberOfDays;
}
public ScoreComponentSettings getCommitsPerDay() {
return commitsPerDay;
}
public void setCommitsPerDay(ScoreComponentSettings commitsPerDay) {
this.commitsPerDay = commitsPerDay;
}
@Override public String toString() {
return "ScmScoreSettings{" +
"commitsPerDay=" + commitsPerDay +
", numberOfDays=" + numberOfDays +
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/QualityScoreSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Bean to hold score settings specific to quality
*/
public class QualityScoreSettings extends ScoreComponentSettings {
//Settings for Code Coverage
private ScoreComponentSettings codeCoverage;
//Settings for Unit Tests
private ScoreComponentSettings unitTests;
//Settings for Violations
private ViolationsScoreSettings violations;
public static QualityScoreSettings cloneQualityScoreSettings(QualityScoreSettings qualityScoreSettings) {
if (null == qualityScoreSettings) {
return null;
}
QualityScoreSettings qualityScoreSettingsClone = new QualityScoreSettings();
ScoreComponentSettings.copyScoreComponentSettings(qualityScoreSettings, qualityScoreSettingsClone);
qualityScoreSettingsClone.setCodeCoverage(
ScoreComponentSettings.cloneScoreComponentSettings(qualityScoreSettings.getCodeCoverage())
);
qualityScoreSettingsClone.setUnitTests(
ScoreComponentSettings.cloneScoreComponentSettings(qualityScoreSettings.getUnitTests())
);
qualityScoreSettingsClone.setViolations(
ViolationsScoreSettings.cloneViolationsScoreSettings(qualityScoreSettings.getViolations())
);
return qualityScoreSettingsClone;
}
public ScoreComponentSettings getCodeCoverage() {
return codeCoverage;
}
public void setCodeCoverage(ScoreComponentSettings codeCoverage) {
this.codeCoverage = codeCoverage;
}
public ScoreComponentSettings getUnitTests() {
return unitTests;
}
public void setUnitTests(ScoreComponentSettings unitTests) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/BuildScoreSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Bean to hold score settings specific to build
*/
public class BuildScoreSettings extends ScoreComponentSettings {
public static final long BUILD_DURATION_THRESHOLD_MILLIS = 300000;
public static final int BUILD_STATUS_NUM_OF_DAYS = 14;
//Settings for Build Threshold Duration
private BuildDurationScoreSettings duration;
//Settings for Build Status
private ScoreComponentSettings status;
//Number Of Days to calculate build score
private int numberOfDays = BUILD_STATUS_NUM_OF_DAYS;
public static BuildScoreSettings cloneBuildScoreSettings(BuildScoreSettings buildScoreSettings) {
if (null == buildScoreSettings) {
return null;
}
BuildScoreSettings buildScoreSettingsClone = new BuildScoreSettings();
ScoreComponentSettings.copyScoreComponentSettings(buildScoreSettings, buildScoreSettingsClone);
buildScoreSettingsClone.setNumberOfDays(buildScoreSettings.getNumberOfDays());
buildScoreSettingsClone.setStatus(
ScoreComponentSettings.cloneScoreComponentSettings(buildScoreSettings.getStatus())
);
buildScoreSettingsClone.setDuration(
BuildDurationScoreSettings.cloneBuildDurationScoreSettings(buildScoreSettings.getDuration())
);
return buildScoreSettingsClone;
}
public int getNumberOfDays() {
return numberOfDays;
}
public void setNumberOfDays(int numberOfDays) {
this.numberOfDays = numberOfDays;
}
public BuildDurationScoreSettings getDuration() {
return duration;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/PropagateType.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
public enum PropagateType {
no(1),
widget(2),
dashboard(3);
private final int value;
private PropagateType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/DeployScoreSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Bean to hold score settings specific to deploy
*/
public class DeployScoreSettings extends ScoreComponentSettings {
//Settings for Deploy Success Instances
private ScoreComponentSettings deploySuccess;
//Settings for Instances Online
private ScoreComponentSettings intancesOnline;
public static DeployScoreSettings cloneDeployScoreSettings(DeployScoreSettings deployScoreSettings) {
if (null == deployScoreSettings) {
return null;
}
DeployScoreSettings deployScoreSettingsClone = new DeployScoreSettings();
ScoreComponentSettings.copyScoreComponentSettings(deployScoreSettings, deployScoreSettingsClone);
deployScoreSettingsClone.setDeploySuccess(
ScoreComponentSettings.cloneScoreComponentSettings(deployScoreSettings.getDeploySuccess())
);
deployScoreSettingsClone.setIntancesOnline(
ScoreComponentSettings.cloneScoreComponentSettings(deployScoreSettings.getIntancesOnline())
);
return deployScoreSettingsClone;
}
public ScoreComponentSettings getDeploySuccess() {
return deploySuccess;
}
public void setDeploySuccess(ScoreComponentSettings deploySuccess) {
this.deploySuccess = deploySuccess;
}
public ScoreComponentSettings getIntancesOnline() {
return intancesOnline;
}
public void setIntancesOnline(ScoreComponentSettings intancesOnline) {
this.intancesOnline = intancesOnline;
}
@Override public String toString() {
return "DeployScoreSettings{" +
"deploySuccess=" + deploySuccess +
", intancesOnline=" + intancesOnline +
", disabled=" + isDisabled() +
", weight=" + getWeight() +
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ComponentAlert.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Alert Settings for Scoring component
*/
public class ComponentAlert {
private ScoreThresholdSettings.ComparatorType comparator = ScoreThresholdSettings.ComparatorType.less_or_equal;
//Value to compare
private Double value;
public static ComponentAlert cloneComponentAlert(ComponentAlert componentAlert) {
if (null == componentAlert) {
return null;
}
ComponentAlert componentAlertClone = new ComponentAlert();
componentAlertClone.setComparator(componentAlert.getComparator());
componentAlertClone.setValue(componentAlert.getValue());
return componentAlertClone;
}
public ScoreThresholdSettings.ComparatorType getComparator() {
return comparator;
}
public void setComparator(ScoreThresholdSettings.ComparatorType comparator) {
this.comparator = comparator;
}
public Double getValue() {
return value;
}
public void setValue(Double value) {
this.value = value;
}
@Override public String toString() {
return "WidgetAlert{" +
"comparator=" + comparator +
", value=" + value +
'}';
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteria.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
import org.apache.commons.collections.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* Score Criteria
* Criteria Conditions
* - No Widget Found
* - No Data Found in Widget
* Threshold Settings for data
*/
public class ScoreCriteria {
//Score when no widget is found
private ScoreTypeValue noWidgetFound;
//Score when no data is found in widget
private ScoreTypeValue noDataFound;
//List of threshold conditions
private List<ScoreThresholdSettings> dataRangeThresholds;
public static ScoreCriteria cloneScoreCriteria(ScoreCriteria scoreCriteria) {
if (null == scoreCriteria) {
return null;
}
ScoreCriteria scoreCriteriaClone = new ScoreCriteria();
scoreCriteriaClone.setNoDataFound(
ScoreTypeValue.cloneScoreTypeValue(scoreCriteria.getNoDataFound())
);
scoreCriteriaClone.setNoWidgetFound(
ScoreTypeValue.cloneScoreTypeValue(scoreCriteria.getNoWidgetFound())
);
List<ScoreThresholdSettings> dataRangeThresholds = scoreCriteria.getDataRangeThresholds();
if (CollectionUtils.isEmpty(dataRangeThresholds)) {
return scoreCriteriaClone;
}
List<ScoreThresholdSettings> dataRangeThresholdsClone = new ArrayList<>();
for (ScoreThresholdSettings dataRangeThreshold : dataRangeThresholds) {
dataRangeThresholdsClone.add(
ScoreThresholdSettings.cloneScoreThresholdSettings(dataRangeThreshold)
);
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreCollectorItem.java
=====================================================
package com.capitalone.dashboard.model.score;
import com.capitalone.dashboard.model.CollectorItem;
import org.bson.types.ObjectId;
public class ScoreCollectorItem extends CollectorItem {
private static final String DASHBOARD_ID = "dashboardId";
public ObjectId getDashboardId() {
return (ObjectId) getOptions().get(DASHBOARD_ID);
}
public void setDashboardId(ObjectId dashboardId) {
getOptions().put(DASHBOARD_ID, dashboardId);
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
ScoreCollectorItem that = (ScoreCollectorItem) o;
return getDashboardId().equals(that.getDashboardId());
}
@Override
public int hashCode() {
int result = getDashboardId().hashCode();
return result;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreValueType.java
=====================================================
package com.capitalone.dashboard.model.score;
/*
Score Type for calculating scores
*/
public enum ScoreValueType {
DASHBOARD;
public static ScoreValueType fromString(String value) {
for (ScoreValueType scoreValueType : values()) {
if (scoreValueType.toString().equalsIgnoreCase(value)) {
return scoreValueType;
}
}
throw new IllegalArgumentException(value + " is not a valid ScoreValueType.");
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetric.java
=====================================================
package com.capitalone.dashboard.model.score;
import java.util.List;
/*
Score for a component like widget
*/
public class ScoreComponentMetric extends ScoreComponentMetricBase {
//Individual components within a component, with scores for them
private List<ScoreComponentMetricBase> children;
public List<ScoreComponentMetricBase> getChildren() {
return children;
}
public void setChildren(List<ScoreComponentMetricBase> children) {
this.children = children;
}
@Override public String toString() {
return "ScoreComponentMetric{" +
"score='" + getScore() + '\'' +
", total='" + getTotal() + '\'' +
", weight='" + getWeight() + '\'' +
", refId='" + getRefId() + '\'' +
", displayId='" + getDisplayId() + '\'' +
", displayName='" + getDisplayName() + '\'' +
", message='" + getMessage() + '\'' +
", propagate='" + getPropagate() + '\'' +
", state='" + getState() + '\'' +
", noScore=" + isNoScore() +
", children=" + children + '\'' +
", options=" + getOptions() + '\'' +
", alert='" + isAlert() +
'}';
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetricBase.java
=====================================================
package com.capitalone.dashboard.model.score;
import com.google.common.collect.Maps;
import org.bson.types.ObjectId;
import java.util.Map;
public class ScoreComponentMetricBase {
//Score for the widget/component
private String score;
//Score total
private String total;
//Weight in percent for a widget/component
private String weight;
//Reference Id. When score is for type Dashboard, value is Widget Id
private ObjectId refId;
//Unique display id for widget/component
private String displayId;
//Display name for the widget/component
private String displayName;
//Propagate type value for widget/component
private String propagate;
//Status of score calculation
private String state;
//If widget/component has no score, flag is true
private boolean noScore;
//Alert is true if there is message to alert
private boolean alert = false;
//Message to display
private String message;
//Additional options to save data
public Map<String, Object> options = Maps.newHashMap();
public Map<String, Object> getOptions() {
return options;
}
public String getScore() {
return score;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/score/ScoreMetric.java
=====================================================
package com.capitalone.dashboard.model.score;
import com.capitalone.dashboard.model.BaseModel;
import com.google.common.collect.Maps;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Collection;
import java.util.Map;
/*
Collection for scores based on type dashboard/team
*/
@Document(collection = "score_metric")
public class ScoreMetric extends BaseModel {
//Collector Item Id for score
private ObjectId collectorItemId;
//Id for score type as Dashboard/Team
//If type is DASHBOARD, value should be id of dashboard
private ObjectId scoreTypeId;
//Score can be calculated for types defined in ScoreValueType
private ScoreValueType type = ScoreValueType.DASHBOARD;
//Time when score was calculated
private long timestamp;
//Score value
private String score;
//Score total
private String total;
//Failure message
private String failureMssg;
//If the dashboard has no score, the flag is set as true
private boolean noScore;
//Options to save additional properties
public Map<String, String> options = Maps.newHashMap();
//Collection of scores for individual components (widgets for dashboard score)
private Collection<ScoreComponentMetric> componentMetrics;
public Map<String, String> getOptions() {
return options;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/UserInfo.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.Collection;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
import com.google.common.collect.Sets;
@Document(collection="user_info")
@CompoundIndexes({
@CompoundIndex(name = "username_authType", def = "{'username' : 1, 'authType': 1}")
})
public class UserInfo {
@Id
private ObjectId id;
private String username;
private Collection<UserRole> authorities;
private AuthType authType;
private String firstName;
private String middleName;
private String lastName;
private String displayName;
private String emailAddress;
public UserInfo() {
authorities = Sets.newHashSet();
}
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Collection<UserRole> getAuthorities() {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/PolicyScanMetric.java
=====================================================
package com.capitalone.dashboard.model;
public class PolicyScanMetric {
private Integer policycriticalCount;
private Integer policysevereCount;
private Integer polimoderateCount;
private Integer policyAffectedCount;
public Integer getPolicyAffectedCount() {
return policyAffectedCount;
}
public void setPolicyAffectedCount(Integer policyAffectedCount) {
this.policyAffectedCount = policyAffectedCount;
}
public Integer getPolicycriticalCount() {
return policycriticalCount;
}
public void setPolicycriticalCount(Integer policycriticalCount) {
this.policycriticalCount = policycriticalCount;
}
public Integer getPolicysevereCount() {
return policysevereCount;
}
public void setPolicysevereCount(Integer policysevereCount) {
this.policysevereCount = policysevereCount;
}
public Integer getPolimoderateCount() {
return polimoderateCount;
}
public void setPolimoderateCount(Integer polimoderateCount) {
this.polimoderateCount = polimoderateCount;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Cmdb.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Objects;
@Document(collection="cmdb")
public class Cmdb extends BaseModel{
private ObjectId collectorItemId;
private long timestamp;
/**
* configurationItem unique system generated id
*/
@NotNull
private String configurationItem;
/**
* configurationItemSubType SubType of the CI
*/
private String configurationItemSubType;
/**
* configurationItemType Type of the CI
*/
private String configurationItemType;
private String assignmentGroup;
/**
* A owner assigned to the CI usually the id associated with the owner when provided
*/
private String appServiceOwner;
/**
* A owner assigned to the CI usually the id associated with the owner when provided
*/
private String businessOwner;
/**
* A owner assigned to the CI usually the id associated with the owner when provided
*/
private String supportOwner;
/**
* A owner assigned to the CI usually the id associated with the owner when provided
*/
private String developmentOwner;
/**
* A owner assigned to the CI usually the fullName of the owner when provided
*/
private String appServiceOwnerUserName;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Comment.java
=====================================================
package com.capitalone.dashboard.model;
public class Comment {
private String user;
private String userLDAPDN;
private long createdAt;
private long updatedAt;
private String body;
private String status;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getUserLDAPDN() {
return userLDAPDN;
}
public void setUserLDAPDN(String userLDAPDN) {
this.userLDAPDN = userLDAPDN;
}
public long getCreatedAt() {
return createdAt;
}
public void setCreatedAt(long createdAt) {
this.createdAt = createdAt;
}
public long getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(long updatedAt) {
this.updatedAt = updatedAt;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/EnvironmentComponent.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents deployable units (components) deployed to an environment.
*/
@Document(collection = "environment_components")
public class EnvironmentComponent extends BaseModel {
/**
* Deploy collectorItemId
*/
private ObjectId collectorItemId;
private String environmentID;
private String environmentName;
private String environmentUrl;
private String componentID;
private String componentName;
private String componentVersion;
private String jobUrl;
private boolean deployed;
private long deployTime;
private long asOfDate;
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public String getEnvironmentID() {
return environmentID;
}
public void setEnvironmentID(String environmentID) {
this.environmentID = environmentID;
}
public String getEnvironmentName() {
return environmentName;
}
public void setEnvironmentName(String environmentName) {
this.environmentName = environmentName;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Service.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashSet;
import java.util.Set;
/**
* A product or service offered by an Application.
*/
@Document(collection="services")
public class Service extends BaseModel {
private String name;
private String url;
private String applicationName;
private ObjectId dashboardId;
private ServiceStatus status;
private String message;
private long lastUpdated;
private Set<ObjectId> dependedBy = new HashSet<>();
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public ObjectId getDashboardId() {
return dashboardId;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CloudInstanceHistory.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents an EC2 instance from AWS
*/
@Document(collection = "cloud_instance_history")
public class CloudInstanceHistory extends BaseModel{
@Indexed
private String accountNumber;
@Indexed
private long time;
private int total;
private int nonTagged;
private int stopped;
private int expiredImage;
private double estimatedCharge;
private double cpu;
private double diskRead;
private double diskWrite;
private double networkIn;
private double networkOut;
private String currency = "USD";
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Monitor2.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
/*
Represents the getters and setters for the Aws Server Status object.
*/
@Document(collection = "monitor2")
public class Monitor2 extends BaseModel {
private String name;
private String url;
private int status;
private ObjectId dashboardId;
private long lastUpdated;
private String applicationName;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() { return this.url; }
public void setUrl(String url) { this.url = url; }
public int getStatus() { return this.status; }
public void setStatus(int status) { this.status = status; }
public ObjectId getDashboardId() {
return dashboardId;
}
public void setDashboardId(ObjectId dashboardId) {
this.dashboardId = dashboardId;
}
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public long getLastUpdated() {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/ConfigHistOperationType.java
=====================================================
package com.capitalone.dashboard.model;
public enum ConfigHistOperationType {
CREATED,
CHANGED,
RENAMED,
DELETED;
public static ConfigHistOperationType fromString(String value) {
for (ConfigHistOperationType opType : values()) {
if (opType.toString().equalsIgnoreCase(value)) {
return opType;
}
}
throw new IllegalArgumentException(value + " is not a valid operation Type");
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/SprintEstimate.java
=====================================================
package com.capitalone.dashboard.model;
public class SprintEstimate {
private int openEstimate;
private int inProgressEstimate;
private int completeEstimate;
private int totalEstimate;
/**
* @return the openEstimate
*/
public int getOpenEstimate() {
return openEstimate;
}
/**
* @param openEstimate the openEstimate to set
*/
public void setOpenEstimate(int openEstimate) {
this.openEstimate = openEstimate;
}
/**
* @return the inProgressEstimate
*/
public int getInProgressEstimate() {
return inProgressEstimate;
}
/**
* @param inProgressEstimate the inProgressEstimate to set
*/
public void setInProgressEstimate(int inProgressEstimate) {
this.inProgressEstimate = inProgressEstimate;
}
/**
* @return the completeEstimate
*/
public int getCompleteEstimate() {
return completeEstimate;
}
/**
* @param completeEstimate the completeEstimate to set
*/
public void setCompleteEstimate(int completeEstimate) {
this.completeEstimate = completeEstimate;
}
/**
* @return the totalEstimate
*/
public int getTotalEstimate() {
return totalEstimate;
}
/**
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CommitStatus.java
=====================================================
package com.capitalone.dashboard.model;
public class CommitStatus {
private String state;
private String context;
private String author;
private String authorLDAPDN;
private String description;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getAuthorLDAPDN() {
return authorLDAPDN;
}
public void setAuthorLDAPDN(String authorLDAPDN) {
this.authorLDAPDN = authorLDAPDN;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/ServiceStatus.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Denotes the status of a product or service
*/
public enum ServiceStatus {
Ok(200, 200),
Warning(300, 400),
Unauth(401, 401),
Alert(0, 999);
private int low;
private int high;
private ServiceStatus(int low, int high) {
this.low = low;
this.high = high;
}
public static ServiceStatus fromString(String value) {
for(ServiceStatus status : ServiceStatus.values()) {
if (status.toString().equalsIgnoreCase(value)) {
return status;
}
}
throw new IllegalArgumentException(value + " is not a valid ServiceStatus.");
}
public static ServiceStatus getServiceStatus(int statusCode) {
for(ServiceStatus status : ServiceStatus.values()) {
if(status.low <= statusCode && status.high >= statusCode) {
return status;
}
}
return Alert;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CloudSubNetwork.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Document(collection = "cloud_subnetwork")
public class CloudSubNetwork extends BaseModel{
@Indexed
private String subnetId;
private String accountNumber;
private String virtualNetworkId;
private String cidrBlock;
private int cidrCount;
private String zone;
private int availableIPCount;
private int subscribedIPCount;
private int usedIPCount;
private boolean defaultForZone;
private String state;
private long creationDate;
private long lastUpdateDate;
private List<NameValue> tags = new ArrayList<>();
private Map<String, Integer> ipUsage;
private Map<String, Integer> subscribedIPUsage;
public Map<String, Integer> getIpUsage() {
return ipUsage;
}
public void setIpUsage(Map<String, Integer> ipUsage) {
this.ipUsage = ipUsage;
}
public String getSubnetId() {
return subnetId;
}
public void setSubnetId(String subnetId) {
this.subnetId = subnetId;
}
public String getVirtualNetworkId() {
return virtualNetworkId;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CloudVolumeStorage.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
@Document(collection = "cloud_volume")
public class CloudVolumeStorage extends BaseModel{
@Indexed
private String volumeId;
@Indexed
private String accountNumber;
private String status;
private long creationDate;
private int size;
private List<NameValue> tags = new ArrayList<>();
private boolean encrypted;
private String type;
private String zone;
private List<String> attachInstances = new ArrayList<>();
public String getVolumeId() {
return volumeId;
}
public void setVolumeId(String volumeId) {
this.volumeId = volumeId;
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Owner.java
=====================================================
package com.capitalone.dashboard.model;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
public class Owner {
private String username;
private AuthType authType;
public Owner() {}
public Owner(String username, AuthType authType) {
this.username = username;
this.authType = authType;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public AuthType getAuthType() {
return authType;
}
public void setAuthType(AuthType authType) {
this.authType = authType;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
Owner rhs = (Owner) obj;
return new EqualsBuilder().append(username, rhs.username).append(authType, rhs.authType).isEquals();
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/AuditType.java
=====================================================
package com.capitalone.dashboard.model;
public enum AuditType {
ALL,
CODE_REVIEW,
BUILD_REVIEW,
CODE_QUALITY,
STATIC_SECURITY_ANALYSIS,
LIBRARY_POLICY,
TEST_RESULT,
PERF_TEST,
ARTIFACT;
public static AuditType fromString(String value) {
for (AuditType auditType : values()) {
if (auditType.toString().equalsIgnoreCase(value)) {
return auditType;
}
}
throw new IllegalArgumentException(value + " is not a Audit Type");
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/EnvironmentStatus.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents the status (online/offline) of a server for a given component and environment.
*/
@Document(collection = "environment_status")
public class EnvironmentStatus extends BaseModel {
private ObjectId collectorItemId;
private String componentID;
private String environmentName;
private String componentName;
private String resourceName;
private String parentAgentName;
private boolean online;
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public String getComponentID() {
return componentID;
}
public void setComponentID(String componentID) {
this.componentID = componentID;
}
public String getEnvironmentName() {
return environmentName;
}
public void setEnvironmentName(String environmentName) {
this.environmentName = environmentName;
}
public String getComponentName() {
return componentName;
}
public void setComponentName(String componentName) {
this.componentName = componentName;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TestCaseCondition.java
=====================================================
package com.capitalone.dashboard.model;
public class TestCaseCondition {
private String condition;
private TestCaseConditionResult result;
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public TestCaseConditionResult getResult() {
return result;
}
public void setResult(TestCaseStatus status, long duration) {
TestCaseConditionResult result = new TestCaseConditionResult();
result.setDuration(duration);
result.setStatus(status);
this.result = result;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CollectorType.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Enumerates the possible {@link Collector} types.
*/
public enum CollectorType {
SCM,
CMDB,
Incident,
Build,
Artifact,
Deployment,
AgileTool,
@Deprecated
Feature,
TestResult,
@Deprecated
ScopeOwner,
@Deprecated
Scope,
CodeQuality,
Test,
StaticSecurityScan,
LibraryPolicy,
ChatOps,
Cloud,
Product,
AppPerformance,
InfraPerformance,
Score,
TEAM,
Audit;
public static CollectorType fromString(String value) {
for (CollectorType collectorType : values()) {
if (collectorType.toString().equalsIgnoreCase(value)) {
return collectorType;
}
}
throw new IllegalArgumentException(value + " is not a CollectorType");
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/ApiToken.java
=====================================================
package com.capitalone.dashboard.model;
import com.google.common.hash.Hashing;
import org.springframework.data.mongodb.core.mapping.Document;
import java.nio.charset.StandardCharsets;
@Document(collection="apitoken")
public class ApiToken extends BaseModel {
static final String HASH_PREFIX = "sha512:";
private String apiUser;
private String apiKey;
private Long expirationDt;
public ApiToken(String apiUser, String apiKey, Long expirationDt) {
this.apiUser = apiUser;
this.apiKey = hash(apiKey);
this.expirationDt = expirationDt;
}
public String getApiUser() {
return apiUser;
}
public void setApiUser(String apiUser) {
this.apiUser = apiUser;
}
public String getApiKey() {
return apiKey;
}
public void setApiKey(String apiKey) {
this.apiKey = hash(apiKey);
}
public Long getExpirationDt() {
return expirationDt;
}
public void setExpirationDt(Long expirationDt) {
this.expirationDt = expirationDt;
}
static String hash(String apiKey) {
if (!apiKey.startsWith(HASH_PREFIX)) {
return HASH_PREFIX + Hashing.sha512().hashString(apiKey, StandardCharsets.UTF_8).toString();
}
return apiKey;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/AuthType.java
=====================================================
package com.capitalone.dashboard.model;
public enum AuthType {
STANDARD,
LDAP,
APIKEY;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Template.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
/**
* A collection of templates represent a software
* project under development and/or in production use.
*/
@Document(collection = "templates")
public class Template extends BaseModel {
@Indexed(unique = true)
private String template;
private List<String> widgets = new ArrayList<>();
private List<String> order = new ArrayList<>();
public Template(String template, List<String> widgets, List<String> order) {
this.template = template;
this.widgets = widgets;
this.order = order;
}
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
this.template = template;
}
public List<String> getWidgets() {
return widgets;
}
public void setWidgets(List<String> widgets) {
this.widgets = widgets;
}
public List<String> getOrder() {
return order;
}
public void setOrder(List<String> order) {
this.order = order;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CommitType.java
=====================================================
package com.capitalone.dashboard.model;
public enum CommitType {
NotBuilt, //maven release commits that are not built
Merge, //github merge commits that dont show up in build change set
New;
public static CommitType fromString(String value) {
for (CommitType commitType : values()) {
if (commitType.toString().equalsIgnoreCase(value)) {
return commitType;
}
}
throw new IllegalArgumentException(value + " is not a valid Commit Type");
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Incident.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Objects;
@Document(collection="incident")
public class Incident extends BaseModel {
private ObjectId collectorItemId;
private Long timestamp;
private String incidentItem;
private String incidentID;
private String category;
private Long openTime;
private String openedBy;
private String severity;
private Long updatedTime;
private String primaryAssignmentGroup;
private String status;
private Long closedTime;
private String closedBy;
private String closureCode;
private String affectedItem;
private String incidentDescription;
private String incidentSysID;
private String affectedItemType;
private String affectedItemSysId;
private String affectedBusinessServiceItem;
private String affectedBusinessServiceItemType;
private String affectedBusinessServiceItemSysId;
private boolean attachedToBusinessServiceOrEnvironmentOnly;
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ");
public ObjectId getCollectorItemId() { return collectorItemId; }
public void setCollectorItemId(ObjectId collectorItemId) { this.collectorItemId = collectorItemId; }
public long getTimestamp() { return timestamp; }
public void setTimestamp(long timestamp) { this.timestamp = timestamp; }
public void setTimestamp(String timestamp) { this.timestamp = DATE_FORMATTER.parseMillis(timestamp); }
public String getIncidentItem() { return incidentItem; }
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/BinaryArtifact.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Binary artifacts produced by build jobs and stored in an artifact repository.
*
* Possible collectors:
* Nexus (in scope)
* Artifactory
* npm
* nuget
* rubygems
*
*/
@Document(collection = "artifacts")
public class BinaryArtifact extends BaseModel {
// list of known metadata properties
// Note: these may be hard coded in other modules and external tools
private static final String METADATA_BUILD_URL = "buildUrl";
private static final String METADATA_BUILD_NUMBER = "buildNumber";
private static final String METADATA_JOB_URL = "jobUrl";
private static final String METADATA_JOB_NAME = "jobName";
private static final String METADATA_INSTANCE_URL = "instanceUrl";
private static final String METADATA_SCM_URL = "scmUrl";
private static final String METADATA_SCM_BRANCH = "scmBranch";
private static final String METADATA_SCM_REVISION_NUMBER = "scmRevisionNumber";
/**
* CollectorItemId for the {@link Build} that produced the artifact
*/
private ObjectId collectorItemId;
private long timestamp;
private String canonicalName;
private String artifactGroupId;
private String artifactModule;
private String artifactVersion;
private String artifactName;
private String artifactClassifier;
private String artifactExtension;
private String type;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/SCM.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.List;
import java.util.Objects;
/**
* Base class to represent the details of a change in a source code management
* system.
*/
public class SCM {
protected String scmUrl;
protected String scmBranch; // For SCM that don't have branch in the url
protected String scmRevisionNumber;
protected String scmCommitLog;
protected String scmAuthor;
protected String scmAuthorLogin;
protected String scmAuthorLDAPDN;
protected String scmCommitter;
protected String scmCommitterLogin;
protected List<String> scmParentRevisionNumbers;
protected long scmCommitTimestamp;
protected long numberOfChanges;
protected CommitType type;
protected String pullNumber;
protected List<String> filesAdded;
protected List<String> filesRemoved;
protected List<String> filesModified;
public SCM(){
}
public SCM(SCM scm) {
this.scmUrl = scm.scmUrl;
this.scmBranch = scm.scmBranch;
this.scmRevisionNumber = scm.scmRevisionNumber;
this.scmCommitLog = scm.scmCommitLog;
this.scmAuthor = scm.scmAuthor;
this.scmAuthorLogin = scm.scmAuthorLogin;
this.scmParentRevisionNumbers = scm.scmParentRevisionNumbers;
this.scmCommitTimestamp = scm.scmCommitTimestamp;
this.numberOfChanges = scm.numberOfChanges;
this.type = scm.type;
this.filesAdded = scm.filesAdded;
this.filesRemoved = scm.filesRemoved;
this.filesModified = scm.filesModified;
}
@SuppressWarnings({"PMD.ExcessiveParameterList"})
public SCM(String scmUrl, String scmBranch, String scmRevisionNumber, String scmCommitLog, String scmAuthor, String scmAuthorLogin, List<String> scmParentRevisionNumbers, long scmCommitTimestamp, long numberOfChanges, CommitType type) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TestCapability.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.ArrayList;
import java.util.Collection;
public class TestCapability {
/**
* Creation timestamp
*/
private long timestamp;
/**
* Identifies this test result in the source system
*/
private String executionId;
/**
* Description of the test result that might make sense to a human
*/
private String description;
/**
* Optional URL to test results
*/
private String url;
/**
* Start test execution time {@link java.util.Date#getTime()}
*/
private long startTime;
/**
* End test execution time {@link java.util.Date#getTime()}
*/
private long endTime;
/**
* Test duration in milliseconds
*/
private long duration;
/**
* Count of test cases that failed in all test suites
*/
private int failedTestSuiteCount;
/**
* Count of test cases that generated an error in all test suites
*/
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/KeyValueLog.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class KeyValueLog {
private static final char SEPERATOR = ' ';
private static final char EQUALS = '=';
private static final char QUOTE = '"';
private StringBuilder builder = new StringBuilder();
private Map<String, Object> attributes = new LinkedHashMap<>();
public KeyValueLog with(String key, Object value) {
attributes.put(key, value);
return this;
}
@Override
public String toString() {
Set<String> keySet = attributes.keySet();
for(String key : keySet) {
builder.append(key).append(EQUALS).append(QUOTE).append(attributes.get(key)).append(QUOTE).append(SEPERATOR);
}
return builder.toString().trim();
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CollectionError.java
=====================================================
package com.capitalone.dashboard.model;
public class CollectionError {
private String errorCode;
private String errorMessage;
private long timestamp;
public static final String UNKNOWN_HOST = "Unreachable";
public CollectionError(String errorCode, String errorMessage) {
this.errorCode = errorCode;
this.errorMessage = errorMessage;
this.timestamp = System.currentTimeMillis();
}
public String getErrorCode() {
return errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
public long getTimestamp() {
return timestamp;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/RallyFeature.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents the rally metrics data for a particular iteration with remaining days calculated
* by start date and end date.
*/
@Document(collection = "rally_feature")
public class RallyFeature extends BaseModel {
private long timestamp;
private Object endDate;
private int remainingDays;
private Object startDate;
private long lastUpdated;
private ObjectId collectorItemId;
private String plannedVelocity;
private String state;
private String taskActualTotal;
private String taskEstimateTotal;
private String taskRemainingTotal;
private String projectId;
private String projectName;
private String planEstimate;
private static final String INSTANCE_URL = "instanceUrl";
private static final String ITERATION_NAME = "iterationName";
private static final String ITERATION_ID = "iterationId";
private String userListCount;
private String lastExecuted;
private Map<String, Object> options = new HashMap<>();
private Set<RallyStoryStages> storyStages = new HashSet<>();
public Object getStartDate() {
return startDate;
}
public void setStartDate(Object startDate) {
this.startDate = startDate;
}
public int getRemainingDays() {
return remainingDays;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/Widget.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import java.util.HashMap;
import java.util.Map;
/**
* Represents a widget on the dashboard. Each widget is associated with a specific component. The id, name and options
* should be provided by the UI.
*/
public class Widget {
private ObjectId id;
private String name;
private ObjectId componentId;
private Map<String,Object> options = new HashMap<>();
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ObjectId getComponentId() {
return componentId;
}
public void setComponentId(ObjectId componentId) {
this.componentId = componentId;
}
public Map<String, Object> getOptions() {
return options;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TestResult.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Collection;
/**
* Represents a collection of test suites that have been executed. This may include
* a unit test run, a security scan, static analysis, functional tests,
* manual acceptance tests or bug reports.
*
* Possible Collectors:
* Hudson (in scope)
* ALM
* Various build system test results
*
*/
@Document(collection="test_results")
@CompoundIndexes({
@CompoundIndex(name = "test_results_collItemId_ts_idx", def = "{'collectorItemId' : 1, 'timestamp': -1}")
})
public class TestResult extends BaseModel {
/**
* ID of {@link CollectorItem}
*/
private ObjectId collectorItemId;
/**
* Creation timestamp
*/
private long timestamp;
/**
* Identifies this test result in the source system
*/
private String executionId;
//Object ID of the build event - if say build happens via Jenkins
private ObjectId buildId;
/**
* Description of the test result that might make sense to a human
*/
private String description;
/**
* Optional URL to test results
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TeamInventory.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
@Document(collection="teamInventory")
public class TeamInventory extends BaseModel {
private ObjectId collectorId;
private ObjectId collectorItemId;
@Indexed
private String teamId;
private String name;
private String lob;
private List<TeamMember> teamMembers;
private long timestamp;
@Transient
private Collector collector;
public Collector getCollector() {
return collector;
}
public void setCollector(Collector collector) {
this.collector = collector;
}
public TeamInventory(String teamId, String name) {
this.teamId = (teamId != null ? teamId.trim() : "");
this.name = (name != null ? name.trim() : "");
}
public ObjectId getCollectorId() {
return collectorId;
}
public void setCollectorId(ObjectId collectorId) {
this.collectorId = collectorId;
}
public String getTeamId() {
return teamId;
}
public void setTeamId(String teamId) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/CodeQualityMetric.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Represents a {@link CodeQuality} metric. Each metric should have a unique name property.
*/
public class CodeQualityMetric {
private String name;
private String value;
private String formattedValue;
private CodeQualityMetricStatus status;
private String statusMessage;
public CodeQualityMetric(String name) {
this.name = name;
}
public CodeQualityMetric() {}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
public String getFormattedValue() {
return formattedValue;
}
public void setFormattedValue(String formattedValue) {
this.formattedValue = formattedValue;
}
public CodeQualityMetricStatus getStatus() {
return status;
}
public void setStatus(CodeQualityMetricStatus status) {
this.status = status;
}
public String getStatusMessage() {
return statusMessage;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/ScopeOwnerCollectorItem.java
=====================================================
package com.capitalone.dashboard.model;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.springframework.data.mongodb.core.index.Indexed;
/**
* Collector implementation for Feature that stores system configuration
* settings required for source system data connection (e.g., API tokens, etc.)
*
* @author KFK884
*/
public class ScopeOwnerCollectorItem extends CollectorItem {
@Indexed
private static final String TEAM_ID = "teamId";
@Indexed
private static final String PROJECT_ID = "projectId";
private static final String CHANGE_DATE = "changeDate";
private static final String ASSET_STATE = "assetState";
private static final String IS_DELETED = "isDeleted";
public String getTeamId() {
return (String) getOptions().get(TEAM_ID);
}
public void setTeamId(String teamId) {
getOptions().put(TEAM_ID, teamId);
}
public String getProjectId() {
return (String) getOptions().get(PROJECT_ID);
}
public void setProjectId(String projectId) {
getOptions().put(PROJECT_ID, projectId);
}
public String getName() {
return getDescription();
}
public void setName(String name) {
setDescription(name);
}
public String getChangeDate() {
return (String) getOptions().get(CHANGE_DATE);
}
public void setChangeDate(String changeDate) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TestCase.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
* An individual test case in a {@link TestSuite}.
*/
public class TestCase {
/**
* Identifies this test case in the source system
*/
private String id;
/**
* Description of the test case that might make sense to a human
*/
private String description;
private long duration;
private int totalTestStepCount;
/**
* Count of test cases that failed
*/
private int failedTestStepCount;
/**
* Count of test cases that generated an error
*/
private int successTestStepCount;
/**
* Count of test cases that were skipped
*/
private int skippedTestStepCount;
private int unknownStatusTestStepCount;
/**
* Status of the test case
*/
private TestCaseStatus status = TestCaseStatus.Unknown;
private Collection<TestCaseStep> testSteps = new ArrayList<>();
private Set<String> tags = new HashSet<>();
/**
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatDisposition.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.Arrays;
public enum LibraryPolicyThreatDisposition {
Open,
Closed,
FalsePositive,
WillNotFix,
NotUsed,
Challenged,
ReviewRequested,
Unknown;
public static LibraryPolicyThreatDisposition fromString(String value) {
return Arrays.stream(values())
.filter(disposition -> disposition.toString()
.equalsIgnoreCase(value))
.findFirst().orElse(Unknown);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/ArtifactIdentifier.java
=====================================================
package com.capitalone.dashboard.model;
@SuppressWarnings("PMD.NPathComplexity")
public class ArtifactIdentifier {
private final String group;
private final String name;
private final String version;
private final String classifier;
private final String extension;
public ArtifactIdentifier(String group, String name, String version, String classifier, String extension) {
super();
this.group = group;
this.name = name;
this.version = version;
this.classifier = classifier;
this.extension = extension;
}
/**
* @return the group
*/
public String getGroup() {
return group;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @return the version
*/
public String getVersion() {
return version;
}
/**
* @return the classifier
*/
public String getClassifier() {
return classifier;
}
/**
* @return the extension
*/
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/FeatureStatus.java
=====================================================
package com.capitalone.dashboard.model;
public enum FeatureStatus {
BACKLOG("Backlog"), GROOMING("Grooming"), WAITING("Waiting"), IN_PROGRESS("In Progress"), IMPEDED(
"Impeded"), DONE("Done"), ACCEPTED("Accepted");
private String status;
FeatureStatus(String status) {
this.status = status;
}
public String getStatus() {
return this.status;
}
@Override
public String toString() {
return this.status;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/package-info.java
=====================================================
package com.capitalone.dashboard.model;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/NameValueCount.java
=====================================================
package com.capitalone.dashboard.model;
public class NameValueCount {
private NameValue keyValue;
private int count;
public NameValueCount(NameValue keyValue, int count) {
this.keyValue = keyValue;
this.count = count;
}
public NameValue getKeyValue() {
return keyValue;
}
public void setKeyValue(NameValue keyValue) {
this.keyValue = keyValue;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/FeatureHistory.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents a trending history of features (story/requirement) from a content management system.
*
* Possible collectors: VersionOne PivotalTracker Rally Trello Jira
*
* @author kfk884
*
*/
@Document(collection = "feature-history")
public class FeatureHistory extends BaseModel {
/*
* Sprint data
*/
@Indexed
private String sprintID;
private String sprintBeginDate;
private String sprintEndDate;
/*
* Scope data
*/
@Indexed
private String projectID;
/*
* ScopeOwner data
*/
@Indexed
private String teamID;
/*
* Story data
*/
private String sStatus;
private String sEstimate;
private String sToDo;
private String sAssetState;
private String sSoftwareTesting;
private String isDeleted;
@Indexed
private String changeDate;
private String reportedDate;
@Indexed
private String storyID;
public String getStoryID() {
return storyID;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/TestSuite.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.ArrayList;
import java.util.Collection;
/**
* A collection of {@link TestCase}s of a particular {@link TestSuiteType}.
*/
public class TestSuite {
private String id;
/**
* Description of the test suite that might make sense to a human
*/
private String description;
/**
* Type of test
*/
private TestSuiteType type;
/**
* Start test suite execution time {@link java.util.Date#getTime()}
*/
private long startTime;
/**
* End test suite execution time {@link java.util.Date#getTime()}
*/
private long endTime;
/**
* Test suite duration in milliseconds
*/
private long duration;
private int totalTestCaseCount;
/**
* Count of test cases that failed
*/
private int failedTestCaseCount;
/**
* Count of test cases that generated an error
*/
private int successTestCaseCount;
/**
* Count of test cases that were skipped
*/
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/model/FortifyScanReport.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "fortify_report")
@CompoundIndexes(value = { @CompoundIndex(name = "project_id", def = "{'projectId' : 1, 'collectorItemId': 1}") })
public class FortifyScanReport extends BaseModel {
private ObjectId collectorItemId;
private long timestamp;
private String name;
private String url;
private long projectId;
private String version;
private Map<String, Threat> threats = new HashMap<>();
public static class Threat {
List<String> components = new ArrayList<>();
int count;
public Threat(int count) {
this.count = count;
}
public Threat() {
// TODO Auto-generated constructor stub
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List<String> getComponents() {
return components;
}
public void setComponents(List<String> components) {
this.components = components;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/CloudVirtualNetworkListRefreshRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
public class CloudVirtualNetworkListRefreshRequest {
@NotNull
private String accountNumber;
@NotNull
private List<String> virtualNetworkIds;
private Date refreshDate;
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public List<String> getVirtualNetworkIds() {
return virtualNetworkIds;
}
public void setVirtualNetworkIds(List<String> virtualNetworkIds) {
this.virtualNetworkIds = virtualNetworkIds;
}
public Date getRefreshDate() {
return refreshDate;
}
public void setRefreshDate(Date refreshDate) {
this.refreshDate = refreshDate;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/CodeQualityCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.CodeQualityMetric;
import com.capitalone.dashboard.model.CodeQualityType;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
public class CodeQualityCreateRequest {
private String hygieiaId;
@NotNull
private long timestamp;
@NotNull
private String projectName;
@NotNull
private String projectId;
@NotNull
private String projectUrl;
@NotNull
private String serverUrl;
@NotNull
private CodeQualityType type;
@NotNull
private String projectVersion;
private String toolName;
private String niceName;
private List<CodeQualityMetric> metrics = new ArrayList<>();
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public CodeQualityType getType() {
return type;
}
public void setType(CodeQualityType type) {
this.type = type;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/GitRequestCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.SCM;
public class GitRequestCreateRequest extends SCM {
private String hygieiaId;
private long timestamp;
public String getHygieiaId() {
return hygieiaId;
}
public void setHygieiaId(String hygieiaId) {
this.hygieiaId = hygieiaId;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/DeployDataCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
public class DeployDataCreateRequest {
@NotNull
private String executionId;
@NotNull
private String jobUrl;
@NotNull
private String appName;
@NotNull
private String envName;
@NotNull
private String artifactName;
@NotNull
private String artifactVersion;
@NotNull
private String jobName;
@NotNull
private String instanceUrl;
@NotNull
private String deployStatus;
@NotNull
private long startTime;
private String artifactGroup;
private String hygieiaId;
private long endTime;
private long duration;
private String startedBy;
private String collectorName;
private String niceName;
public String getExecutionId() {
return executionId;
}
public void setExecutionId(String executionId) {
this.executionId = executionId;
}
public String getJobUrl() {
return jobUrl;
}
public void setJobUrl(String jobUrl) {
this.jobUrl = jobUrl;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/TestDataCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.TestCapability;
import com.capitalone.dashboard.model.TestSuite;
import com.capitalone.dashboard.model.TestSuiteType;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.Collection;
public class TestDataCreateRequest {
/**
* ID of job
*/
@NotNull
private String testJobId;
@NotNull
private String testJobName;
@NotNull
private String serverUrl;
/**
* Optional URL to test results
*/
@NotNull
private String testJobUrl;
/**
* Identifies this test result in the source system
*/
@NotNull
private String executionId;
private String niceName;
/**
* Creation timestamp
*/
private long timestamp;
/**
* Description of the test result that might make sense to a human
*/
private String description;
/**
* Start test execution time {@link java.util.Date#getTime()}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/PerformanceCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.PerformanceType;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.Map;
public class PerformanceCreateRequest {
private String hygieiaId;
@NotNull
private long timestamp;
@NotNull
private String projectName;
@NotNull
private String projectId;
@NotNull
private String projectUrl;
@NotNull
private String serverUrl;
@NotNull
private PerformanceType type;
@NotNull
private String projectVersion;
@NotNull
private String collectorName;
private String niceName;
private String targetAppName;
private String targetEnvName;
private Map<String,Object> metrics = new HashMap<>();
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public PerformanceType getType() {
return type;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/CloudInstanceCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.NameValue;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
public class CloudInstanceCreateRequest {
@NotNull
private String instanceId;
@NotNull
private String accountNumber;
private String instanceType;
private String imageId;
private String imageExpirationDate;
private String imageApproved;
private String instanceOwner;
private String isMonitored;
private String privateDns;
private String privateIp;
private String publicDns;
private String publicIp;
private String subnetId;
private String virtualNetworkId;
private String age;
private String isEncrypted;
private String status;
private String isStopped;
private String isTagged;
private String cpuUtilization;
private String lastUpdatedDate;
private List<String> securityGroups = new ArrayList<>();
private List<NameValue> tags = new ArrayList<>();
private String networkIn;
private String networkOut;
private String diskRead;
private String diskWrite;
private String rootDeviceName;
private String lastAction;
private String autoScaleName;
public String getInstanceId() {
return instanceId;
}
public void setInstanceId(String instanceId) {
this.instanceId = instanceId;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/CloudSubnetListRefreshRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
public class CloudSubnetListRefreshRequest {
@NotNull
private String accountNumber;
@NotNull
private List<String> subnetIds;
private Date refreshDate;
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public List<String> getSubnetIds() {
return subnetIds;
}
public void setSubnetIds(List<String> subnetIds) {
this.subnetIds = subnetIds;
}
public Date getRefreshDate() {
return refreshDate;
}
public void setRefreshDate(Date refreshDate) {
this.refreshDate = refreshDate;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/CloudVolumeCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.NameValue;
import org.springframework.data.mongodb.core.index.Indexed;
import java.util.ArrayList;
import java.util.List;
public class CloudVolumeCreateRequest {
@Indexed
private String volumeId;
@Indexed
private String accountNumber;
private String status;
private long creationDate;
private int size;
private List<NameValue> tags = new ArrayList<>();
private boolean encrypted;
private String type;
private String zone;
private List<String> attchInstances = new ArrayList<>();
public String getVolumeId() {
return volumeId;
}
public void setVolumeId(String volumeId) {
this.volumeId = volumeId;
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public long getCreationDate() {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/GenericCollectorItemCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
/**
* A request to create a Generic Collector Item.
*
*/
public class GenericCollectorItemCreateRequest {
private String buildId;
@NotNull
private String relatedCollectorItemId;
@NotNull
private String toolName;
@NotNull
private String rawData;
@NotNull
private String source;
public String getBuildId() {
return buildId;
}
public void setBuildId(String buildId) {
this.buildId = buildId;
}
public String getToolName() {
return toolName;
}
public void setToolName(String toolName) {
this.toolName = toolName;
}
public String getRawData() {
return rawData;
}
public void setRawData(String rawData) {
this.rawData = rawData;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/CloudSubnetCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.NameValue;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class CloudSubnetCreateRequest {
@NotNull
private String subnetId;
private String accountNumber;
private String virtualNetworkId;
private String cidrBlock;
private String cidrCount;
private String zone;
private String availableIPCount;
private String subscribedIPCount;
private String usedIPCount;
private String defaultForZone;
private String state;
private String creationDate;
private String lastUpdateDate;
private List<NameValue> tags = new ArrayList<>();
private Map<String, Integer> ipUsage;
private Map<String, Integer> subscribedIPUsage;
public String getSubnetId() {
return subnetId;
}
public void setSubnetId(String subnetId) {
this.subnetId = subnetId;
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public String getVirtualNetworkId() {
return virtualNetworkId;
}
public void setVirtualNetworkId(String virtualNetworkId) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/PerfTestDataCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.TestCapability;
import com.capitalone.dashboard.model.TestSuite;
import com.capitalone.dashboard.model.TestSuiteType;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.Collection;
public class PerfTestDataCreateRequest {
/**
* perf test runID should be unique for each execution.
*/
@NotNull
private String runId;
/**
* Provide a test name, a new testname will create a new collector Item
*/
@NotNull
private String testName;
/**
* Provide a platform name, a new platformName will create a new collector Item. default should be Jmeter.
*/
@NotNull
private String perfTool;
/**
* Type of test should be performance
*/
@NotNull
private TestSuiteType type;
/**
* Provide the test result status
*/
private String resultStatus;
/**
* Provide a report URL if available
*/
private String reportUrl;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/BinaryArtifactCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.SCM;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* A request to create a BinaryArtifact.
*
*/
public class BinaryArtifactCreateRequest {
@NotNull
private String artifactName;
@NotNull
String canonicalName;
@NotNull
private String artifactGroup;
@NotNull
private String artifactVersion;
private String artifactModule;
private String artifactClassifier;
private String artifactExtension;
// May be null if comes in from rest call outside of jenkins
private String buildId;
private long timestamp;
// Used by the jenkins plugin
// May be null if comes in from rest call outside of jenkins
private List<SCM> sourceChangeSet = new ArrayList<>();
// See usage of metadata in BinaryArtifactServiceImpl for defined property names
private Map<String, Object> metadata = new HashMap<>();
public String getArtifactName() {
return artifactName;
}
public String getCanonicalName() {
return canonicalName;
}
public void setCanonicalName(String canonicalName) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/ConfigurationCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.capitalone.dashboard.model.Configuration;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class ConfigurationCreateRequest {
private String collectorName;
private Set<Map<String,String>> info = new HashSet<>();
public String getCollectorName() {
return collectorName;
}
public void setCollectorName(String collectorName) {
this.collectorName = collectorName;
}
public Set<Map<String, String>> getInfo() {
return info;
}
public void setInfo(Set<Map<String, String>> info) {
this.info = info;
}
public Configuration toConfiguration() {
return new Configuration(collectorName,info);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/Monitor2DataCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
public class Monitor2DataCreateRequest {
@NotNull
private String name;
private String url;
private int status;
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
public String getUrl() { return this.url; }
public void setUrl(String url) { this.url = url; }
public int getStatus() { return this.status; }
public void setStatus(int status) { this.status = status; }
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/CommitCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.SCM;
public class CommitCreateRequest extends SCM {
private String hygieiaId;
private long timestamp;
public String getHygieiaId() {
return hygieiaId;
}
public void setHygieiaId(String hygieiaId) {
this.hygieiaId = hygieiaId;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/CloudInstanceListRefreshRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
public class CloudInstanceListRefreshRequest {
@NotNull
private String accountNumber;
@NotNull
private List<String> instanceIds;
private Date refreshDate;
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public List<String> getInstanceIds() {
return instanceIds;
}
public void setInstanceIds(List<String> instanceIds) {
this.instanceIds = instanceIds;
}
public Date getRefreshDate() {
return refreshDate;
}
public void setRefreshDate(Date refreshDate) {
this.refreshDate = refreshDate;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/CloudVolumeListRefreshRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
public class CloudVolumeListRefreshRequest {
@NotNull
private String accountNumber;
@NotNull
private List<String> volumeIds;
private Date refreshDate;
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public List<String> getVolumeIds() {
return volumeIds;
}
public void setVolumeIds(List<String> volumeIds) {
this.volumeIds = volumeIds;
}
public Date getRefreshDate() {
return refreshDate;
}
public void setRefreshDate(Date refreshDate) {
this.refreshDate = refreshDate;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/request/BuildDataCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.RepoBranch;
import com.capitalone.dashboard.model.SCM;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
public class BuildDataCreateRequest {
@NotNull
private String number;
@NotNull
private String buildUrl;
@NotNull
private String jobName;
@NotNull
private String buildStatus;
@NotNull
private long startTime;
@NotNull
private String jobUrl;
@NotNull
private String instanceUrl;
private String niceName;
private long endTime;
private long duration;
private String startedBy;
private String log;
private List<RepoBranch> codeRepos = new ArrayList<>();
private List<SCM> sourceChangeSet = new ArrayList<>();
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getBuildUrl() {
return buildUrl;
}
public void setBuildUrl(String buildUrl) {
this.buildUrl = buildUrl;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/event/DashboardEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.DashboardType;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.mongodb.DBObject;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
import org.springframework.data.mongodb.core.mapping.event.AfterDeleteEvent;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import org.springframework.stereotype.Component;
/**
* Listens for Dashboard lifecycle events to create and delete Product collector CollectorItems
* whenever a Team Dashboard is created or deleted.
*/
@Component
public class DashboardEventListener extends AbstractMongoEventListener<Dashboard> {
private final CollectorRepository collectorRepository;
private final CollectorItemRepository collectorItemRepository;
@Autowired
public DashboardEventListener(CollectorRepository collectorRepository,
CollectorItemRepository collectorItemRepository) {
this.collectorRepository = collectorRepository;
this.collectorItemRepository = collectorItemRepository;
}
/**
* Creates a collector item for new team dashboards
* @param event
*/
@Override
public void onAfterSave(AfterSaveEvent<Dashboard> event) {
Dashboard dashboard = event.getSource();
// Ignore product dashboards
if (DashboardType.Product.equals(dashboard.getType())) {
return;
}
Collector productCollector = getProductCollector();
CollectorItem item = getDashboardCollectorItem(dashboard.getId().toString(), productCollector.getId());
if (item == null) {
// Create a new Collector Item
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/event/HygieiaMongoEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.EnvironmentStage;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
import java.util.List;
public abstract class HygieiaMongoEventListener<T> extends AbstractMongoEventListener<T> {
protected final CollectorItemRepository collectorItemRepository;
protected final PipelineRepository pipelineRepository;
protected final CollectorRepository collectorRepository;
public HygieiaMongoEventListener(CollectorItemRepository collectorItemRepository,
PipelineRepository pipelineRepository,
CollectorRepository collectorRepository) {
this.collectorItemRepository = collectorItemRepository;
this.pipelineRepository = pipelineRepository;
this.collectorRepository = collectorRepository;
}
private Collector getProductCollector(){
List<Collector> productCollectors = collectorRepository.findByCollectorType(CollectorType.Product);
if(productCollectors.isEmpty()){
return null;
}
return productCollectors.get(0);
}
/**
* Finds the team dashboard collectoritem by dashboard id and product collectorid
* @param teamDashboard
* @return
*/
protected CollectorItem getTeamDashboardCollectorItem(Dashboard teamDashboard) {
ObjectId productCollectorId = getProductCollector().getId();
ObjectId dashboardId = teamDashboard.getId();
return collectorItemRepository.findTeamDashboardCollectorItemsByCollectorIdAndDashboardId(productCollectorId, dashboardId.toString());
}
/**
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/event/CodeQualityEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.event.sync.SyncDashboard;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
@org.springframework.stereotype.Component
public class CodeQualityEventListener extends HygieiaMongoEventListener<CodeQuality> {
private final SyncDashboard syncDashboard;
@Autowired
public CodeQualityEventListener(
CollectorItemRepository collectorItemRepository,
PipelineRepository pipelineRepository,
CollectorRepository collectorRepository, SyncDashboard syncDashboard) {
super(collectorItemRepository, pipelineRepository, collectorRepository);
this.syncDashboard = syncDashboard;
}
@Override
public void onAfterSave(AfterSaveEvent<CodeQuality> event) {
CodeQuality codeQuality = event.getSource();
syncDashboard.sync(codeQuality);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/event/BuildEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.event.sync.SyncDashboard;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.BuildStatus;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineCommit;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.SCM;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.CommitRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.capitalone.dashboard.util.PipelineUtils.isMoveCommitToBuild;
import static com.capitalone.dashboard.util.PipelineUtils.processPreviousFailedBuilds;
@org.springframework.stereotype.Component
public class BuildEventListener extends HygieiaMongoEventListener<Build> {
private final DashboardRepository dashboardRepository;
private final ComponentRepository componentRepository;
private final CommitRepository commitRepository;
private final SyncDashboard syncDashboard;
@Autowired
public BuildEventListener(DashboardRepository dashboardRepository,
CollectorItemRepository collectorItemRepository,
ComponentRepository componentRepository,
PipelineRepository pipelineRepository,
CollectorRepository collectorRepository, CommitRepository commitRepository, SyncDashboard syncDashboard) {
super(collectorItemRepository, pipelineRepository, collectorRepository);
this.dashboardRepository = dashboardRepository;
this.componentRepository = componentRepository;
this.commitRepository = commitRepository;
this.syncDashboard = syncDashboard;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/event/RelatedCollectorItemEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.event.sync.SyncDashboard;
import com.capitalone.dashboard.event.sync.SyncException;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
@org.springframework.stereotype.Component
public class RelatedCollectorItemEventListener extends HygieiaMongoEventListener<RelatedCollectorItem> {
private static final Log LOG = LogFactory.getLog(RelatedCollectorItemEventListener.class);
private final SyncDashboard syncDashboard;
@Autowired
public RelatedCollectorItemEventListener(
CollectorItemRepository collectorItemRepository,
PipelineRepository pipelineRepository,
CollectorRepository collectorRepository, SyncDashboard syncDashboard) {
super(collectorItemRepository, pipelineRepository, collectorRepository);
this.syncDashboard = syncDashboard;
}
@Override
public void onAfterSave(AfterSaveEvent<RelatedCollectorItem> event) {
RelatedCollectorItem relatedCollectorItem = event.getSource();
try {
syncDashboard.sync(relatedCollectorItem);
} catch (SyncException e) {
LOG.error("Error processing related collector item. ID = " + relatedCollectorItem.getId() + ". Reason " + e.getMessage());
}
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/event/EnvironmentComponentEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.BinaryArtifact;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.EnvironmentComponent;
import com.capitalone.dashboard.model.EnvironmentStage;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineCommit;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.SCM;
import com.capitalone.dashboard.repository.BinaryArtifactRepository;
import com.capitalone.dashboard.repository.BuildRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.CommitRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.JobRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import com.capitalone.dashboard.util.PipelineUtils;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.bson.types.ObjectId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@org.springframework.stereotype.Component
public class EnvironmentComponentEventListener extends HygieiaMongoEventListener<EnvironmentComponent> {
private static final Logger LOGGER = LoggerFactory.getLogger(EnvironmentComponentEventListener.class);
private final DashboardRepository dashboardRepository;
private final ComponentRepository componentRepository;
private final BinaryArtifactRepository binaryArtifactRepository;
private final BuildRepository buildRepository;
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/event/sync/SyncException.java
=====================================================
package com.capitalone.dashboard.event.sync;
public class SyncException extends Exception{
public SyncException(String message) {
super(message);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/event/sync/SyncDashboard.java
=====================================================
package com.capitalone.dashboard.event.sync;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.RepoBranch;
import com.capitalone.dashboard.model.StandardWidget;
import com.capitalone.dashboard.model.Widget;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.repository.BuildRepository;
import com.capitalone.dashboard.repository.CodeQualityRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.collections4.CollectionUtils;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@org.springframework.stereotype.Component
public class SyncDashboard {
private final DashboardRepository dashboardRepository;
private final ComponentRepository componentRepository;
private final CollectorRepository collectorRepository;
private final CollectorItemRepository collectorItemRepository;
private final BuildRepository buildRepository;
private final RelatedCollectorItemRepository relatedCollectorItemRepository;
private final CodeQualityRepository codeQualityRepository;
private static final String BUILD_REPO_REASON = "Code Repo build";
private static final String CODEQUALITY_TRIGGERED_REASON = "Code scan triggered by build";
@Autowired
public SyncDashboard(DashboardRepository dashboardRepository, ComponentRepository componentRepository,
CollectorRepository collectorRepository, CollectorItemRepository collectorItemRepository,
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/event/TestResultEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.TestResult;
import com.capitalone.dashboard.model.TestCapability;
import com.capitalone.dashboard.model.TestSuiteType;
import com.capitalone.dashboard.model.TestCase;
import com.capitalone.dashboard.model.TestCaseStatus;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Performance;
import com.capitalone.dashboard.model.PerformanceType;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.PerformanceRepository;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.bson.types.ObjectId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.concurrent.TimeUnit;
import java.util.Map;
import java.util.Optional;
@Component
public class TestResultEventListener extends AbstractMongoEventListener<TestResult> {
private static final Logger LOGGER = LoggerFactory.getLogger(TestResultEventListener.class);
private static final String STR_RESP_TIME_THRESHOLD = "KPI : Avg response times";
private static final String STR_ACTUAL_RESP_TIME = "Actual Response Time";
private static final String STR_TARGET_RESP_TIME = "Target Response Time";
private static final String STR_TXN_PER_SEC_THRESHOLD = "KPI : Transaction Per Second";
private static final String STR_ACTUAL_TXN_PER_SEC = "Actual Transactions per sec";
private static final String STR_TARGET_TXN_PER_SEC = "Target Transactions per sec";
private static final String STR_ERROR_RATE_THRESHOLD = "KPI : Error Rate Threshold";
private static final String STR_ACTUAL_ERROR_RATE = "Actual Error Rate";
private static final String STR_TARGET_ERROR_RATE = "Target Error Rate";
private static final String STR_CRITICAL = "CRITICAL";
private static final String STR_OPEN = "OPEN";
private static final String COLLECTOR_NAME = "PerfTools";
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/event/CommitEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.CommitType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineCommit;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@org.springframework.stereotype.Component
public class CommitEventListener extends HygieiaMongoEventListener<Commit> {
private final ComponentRepository componentRepository;
private final DashboardRepository dashboardRepository;
@Autowired
public CommitEventListener(ComponentRepository componentRepository,
DashboardRepository dashboardRepository,
CollectorRepository collectorRepository,
CollectorItemRepository collectorItemRepository,
PipelineRepository pipelineRepository) {
super(collectorItemRepository, pipelineRepository, collectorRepository);
this.componentRepository = componentRepository;
this.dashboardRepository = dashboardRepository;
}
@Override
public void onAfterSave(AfterSaveEvent<Commit> event) {
Commit commit = event.getSource();
// Add the commit to all pipelines associated with the team dashboards
// this commit is part of. But only if there is a build collector item
// configured on that dashboard. Otherwise, the commit will be orphaned
// in the commit stage.
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/testutil/FongoConfig.java
=====================================================
package com.capitalone.dashboard.testutil;
import com.capitalone.dashboard.config.MongoConfig;
import com.github.fakemongo.Fongo;
import com.mongodb.MongoClient;
import org.springframework.context.annotation.Bean;
public class FongoConfig extends MongoConfig {
@Override
@Bean
public MongoClient mongo() {
return new Fongo(getDatabaseName()).getMongo();
}
@Override
protected String getDatabaseName() {
return "test-db";
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/testutil/TestRestOperations.java
=====================================================
package com.capitalone.dashboard.testutil;
import com.capitalone.dashboard.collector.RestOperationsSupplier;
import org.springframework.http.HttpStatus;
import org.springframework.web.client.RestOperations;
import java.util.HashMap;
import java.util.Map;
public class TestRestOperations<T> extends RestOperationsSupplier {
TestRestTemplate<? extends T> template;
private Map<String, TestResponse<T>> response;
public TestRestOperations(Map<String, TestResponse<T>> response) {
this.response = response;
}
public Map<String, TestResponse<T>> getResponse() {
return response;
}
public void addResponse(String key, TestResponse testResponse) {
if (response == null) {
response = new HashMap<>();
}
this.response.put(key, testResponse);
}
public void addResponse(String key, T body, HttpStatus httpStatus) {
if (response == null) {
response = new HashMap<>();
}
this.response.put(key, new TestResponse<>(body, httpStatus));
if (template != null) {
template.addResponse(key, new TestResponse<>(body, httpStatus));
}
}
public TestRestTemplate<? extends T> getTemplate() {
return template;
}
public void setTemplate(TestRestTemplate<? extends T> template) {
this.template = template;
}
@Override
public RestOperations get() {
if (template == null) {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/testutil/TestRestTemplate.java
=====================================================
package com.capitalone.dashboard.testutil;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
public class TestRestTemplate<T> extends RestTemplate {
private Map<String, TestResponse<T>> response;
public TestRestTemplate(Map<String, TestResponse<T>> response) {
this.response = response;
}
public Map<String, TestResponse<T>> getResponse() {
return response;
}
public void addResponse(String key, TestResponse testResponse) {
if (response == null) {
response = new HashMap<>();
}
this.response.put(key, testResponse);
}
public void addResponse(String key, T body, HttpStatus httpStatus) {
if (response == null) {
response = new HashMap<>();
}
this.response.put(key, new TestResponse<>(body, httpStatus));
}
public void clearResponse() {
if (response != null) {
response.clear();
}
}
@Override
public <T> ResponseEntity<T> exchange(String var1, HttpMethod var2, HttpEntity<?> var3, Class<T> var4, Object... var5) throws RestClientException {
if (response.containsKey(var1)) {
return new ResponseEntity(response.get(var1).getBody(),response.get(var1).getStatus());
} else {
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/testutil/GsonUtil.java
=====================================================
package com.capitalone.dashboard.testutil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializer;
import org.bson.types.ObjectId;
import java.lang.reflect.Type;
public class GsonUtil {
private static final GsonBuilder gsonBuilder = new GsonBuilder()
.registerTypeAdapter(ObjectId.class, (JsonSerializer<ObjectId>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toHexString()))
.registerTypeAdapter(ObjectId.class, (JsonDeserializer<ObjectId>) GsonUtil::deserialize);
private static ObjectId deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
if (json instanceof JsonObject) {
JsonObject jo = (JsonObject) json;
return new ObjectId(jo.get("timestamp").getAsInt(), jo.get("machineIdentifier").getAsInt(), jo.get("processIdentifier").getAsShort(), jo.get("counter").getAsInt());
}
return new ObjectId(json.getAsString());
}
public static Gson getGson() {
return gsonBuilder.create();
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/testutil/BaseCollectorTestConfig.java
=====================================================
package com.capitalone.dashboard.testutil;
import com.capitalone.dashboard.collector.RestOperationsSupplier;
import org.mockito.Mockito;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.scheduling.TaskScheduler;
import java.util.HashMap;
import java.util.Map;
@ComponentScan(basePackages ={ "com.capitalone.dashboard.collector", "com.capitalone.dashboard.model"}, includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value=TaskScheduler.class),
@ComponentScan.Filter(type = FilterType.REGEX, pattern="com.capitalone.dashboard.collector.*CollectorTask.class"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.capitalone.dashboard.collector.*Settings.class")})
public class BaseCollectorTestConfig {
@Bean
public RestOperationsSupplier restOperationsSupplier() {
Map<String, TestResponse<String>> responseMap = new HashMap<>();
return new TestRestOperations(responseMap);
}
@Bean
public TaskScheduler taskScheduler() {
return Mockito.mock(TaskScheduler.class);
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/testutil/TestResponse.java
=====================================================
package com.capitalone.dashboard.testutil;
import org.springframework.http.HttpStatus;
public class TestResponse<T> {
private T body;
private HttpStatus status;
public TestResponse(T body, HttpStatus status) {
this.body = body;
this.status = status;
}
public T getBody() {
return body;
}
public void setBody(T body) {
this.body = body;
}
public HttpStatus getStatus() {
return status;
}
public void setStatus(HttpStatus status) {
this.status = status;
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/client/RestAuthType.java
=====================================================
package com.capitalone.dashboard.client;
public enum RestAuthType {
BASIC,
TOKEN;
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/client/RestUserInfo.java
=====================================================
package com.capitalone.dashboard.client;
public class RestUserInfo {
private String userId;
private String passCode;
public RestUserInfo(String userId, String passCode) {
this.userId = userId;
this.passCode = passCode;
}
public String getFormattedString() {
return userId.trim() + ":" + passCode.trim();
}
}
=====================================================
== File: site-content/src/main/java/com/capitalone/dashboard/client/RestClient.java
=====================================================
package com.capitalone.dashboard.client;
import com.capitalone.dashboard.util.Encryption;
import com.capitalone.dashboard.util.EncryptionException;
import com.capitalone.dashboard.util.Supplier;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestOperations;
import java.nio.charset.StandardCharsets;
import java.util.Map;
@Component
public class RestClient {
private static final Log LOG = LogFactory.getLog(RestClient.class);
private final RestOperations restOperations;
@Autowired
public RestClient(Supplier<RestOperations> restOperationsSupplier) {
this.restOperations = restOperationsSupplier.get();
}
public ResponseEntity<String> makeRestCallPost(String url, JSONObject body) {
if (restOperations == null) { return null; }
long start = System.currentTimeMillis();
ResponseEntity<String> response
= restOperations.exchange(url, HttpMethod.POST, new HttpEntity<Object>(body, null), String.class);
long end = System.currentTimeMillis();
LOG.info("Time taken to make a post call to "+url+" = "+(end-start));
return response;
}
=====================================================
== File: create_collector.md
=====================================================
Create New Collector
==================================================
Copy skeleton collector project
--------------------------------------
Copy the sample collector project into a new directory in the collectors folder and give it a name to match the collector
you are building (eg pivotalTracker). In the pom.xml file, change the artifactId, name and optionally the groupId elements, like so:
<project>
<groupId>com.capitalone.dashboard</groupId>
<artifactId>pivotal-tracker-collector</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>Pivotal Tracker Collector</name>
...
</project>
The pom file includes all of the dependencies you will need to interact with the Dashboard Application MongoDB instance,
such as Model classes and Repositories.
Extending Collector
--------------------------------------
If you need to store extra configuration for your collector, you can create a class that extends Collector and add new
fields to store configuration information that is specific to your collector.
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
/**
* Collect Features from PivotalTracker
*/
public class PivotalTrackerCollector extends Collector {
private String apiToken;
public String getApiToken() {
return apiToken;
}
public void setApiToken(String apiToken) {
this.apiToken = apiToken;
}
}
If you decide to take this approach, you will also need to create a Spring Data repository interface that extends from
BaseCollectorRepository.
package com.capitalone.dashboard.repository;
=====================================================
== File: .travis.yml
=====================================================
language: java
jdk:
- openjdk8
branches:
only:
- master
- gerrit-integration
- "/^v[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+.*$/"
cache:
directories:
- "$TRAVIS_BUILD_DIR/UI/node_modules"
install: true
before_script:
- sudo chown -R $USER:$GROUP $TRAVIS_BUILD_DIR
script:
- if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then mvn clean install -q; fi
- if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then cp ./src/devops/deploy-snapshot.sh . && ./deploy-snapshot.sh; fi
- if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [[ "$TRAVIS_BRANCH" =~ ^v[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+.*$ ]]; then cp ./src/devops/release.sh . && ./release.sh; fi
notifications:
webhooks:
urls: https://webhooks.gitter.im/e/48597b0f75dd571734bc
on_success: always
on_failure: always
on_start: always
email:
recipients:
- tapabrata.pal@capitalone.com
- nireesh.thiruveedula@capitalone.com
- Stephen.Hughes@capitalone.com
- Prashant.Parekh@capitalone.com
- Matthew.Beasley@capitalone.com
- Subodh.Battina@capitalone.com
- Ragha.Vema@capitalone.com
on_success: always
on_failure: always
=====================================================
== File: src/devops/pmd.xml
=====================================================
<?xml version="1.0"?>
<ruleset name="Custom ruleset"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>
Exclude noisy rules.
</description>
<rule ref="rulesets/internal/all-java.xml">
<exclude name="AddEmptyString"/>
<exclude name="AppendCharacterWithChar"/>
<exclude name="ArrayIsStoredDirectly"/>
<exclude name="AssignmentInOperand"/>
<exclude name="AtLeastOneConstructor"/>
<exclude name="AvoidCatchingGenericException"/>
<exclude name="AvoidDuplicateLiterals"/>
<exclude name="AvoidFieldNameMatchingMethodName"/>
<exclude name="AvoidFinalLocalVariable"/>
<exclude name="AvoidInstantiatingObjectsInLoops"/>
<exclude name="AvoidLiteralsInIfCondition"/>
<exclude name="AvoidSynchronizedAtMethodLevel"/>
<exclude name="AvoidThrowingNullPointerException"/>
<exclude name="AvoidThrowingRawExceptionTypes"/>
<exclude name="AvoidUsingShortType"/>
<exclude name="BeanMembersShouldSerialize"/>
<exclude name="CallSuperInConstructor"/>
<exclude name="CommentRequired"/>
<exclude name="CommentSize"/>
<exclude name="CompareObjectsWithEquals"/>
<exclude name="ConfusingTernary"/>
<exclude name="CyclomaticComplexity"/>
<exclude name="DataflowAnomalyAnalysis"/>
<exclude name="DefaultPackage"/>
<exclude name="DoNotUseThreads"/>
<exclude name="DuplicateImports"/>
<exclude name="EmptyMethodInAbstractClassShouldBeAbstract"/>
<exclude name="ExcessiveImports"/>
<exclude name="ExcessivePublicCount"/>
<exclude name="FieldDeclarationsShouldBeAtStartOfClass"/>
<exclude name="GodClass"/>
<exclude name="GuardDebugLogging"/>
<exclude name="GuardLogStatement"/>
<exclude name="GuardLogStatementJavaUtil"/>
<exclude name="ImmutableField"/>
<exclude name="LawOfDemeter"/>
<exclude name="LocalVariableCouldBeFinal"/>
<exclude name="LoggerIsNotStaticFinal"/>
<exclude name="LongVariable"/>
=====================================================
== File: src/devops/release.sh
=====================================================
#!/bin/bash
cp src/devops/.travis.settings.xml $HOME/.m2/settings.xml
openssl aes-256-cbc -K $encrypted_00b218189f3e_key -iv $encrypted_00b218189f3e_iv -in src/devops/keys.gpg.enc -out keys.gpg -d
gpg --fast-import keys.gpg
shred keys.gpg
sed -i 's|-SNAPSHOT||g' pom.xml
mvn deploy -q -P release
=====================================================
== File: src/devops/deploy-snapshot.sh
=====================================================
#!/bin/bash
cp src/devops/.travis.settings.xml $HOME/.m2/settings.xml
mvn deploy -q
=====================================================
== File: src/devops/.travis.settings.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>ossrh</id>
<username>${env.OSSRH_USERNAME}</username>
<password>${env.OSSRH_PASSWORD}</password>
</server>
</servers>
<profiles>
<profile>
<id>release</id>
<properties>
<gpg.keyname>${env.GPG_KEYNAME}</gpg.keyname>
<gpg.passphrase>${env.GPG_PASSPHRASE}</gpg.passphrase>
</properties>
</profile>
</profiles>
</settings>
=====================================================
== File: src/test/resources/artifacts/artifacts.json
=====================================================
[{
"id": "56ccb7a57fab7c3eac031aac",
"_class": "com.capitalone.dashboard.model.BinaryArtifact",
"timestamp": 1456256819843,
"artifactName": "api.jar",
"canonicalName": "api-1.0.0.0.jar",
"artifactGroupId": "com.lightningcd.api",
"artifactVersion": "1.0.0.0",
"buildInfo": {
"id": "5ba51c320be2d3f98f795044",
"_class": "com.capitalone.dashboard.model.Build",
"collectorItemId": "5ba136220be2d32568777fa5",
"timestamp": 1537547314372,
"number": "148",
"buildUrl": "http://localhost:8082/job/c1usercheck/148/",
"startTime": 1537547300387,
"endTime": 1537547314338,
"duration": 13951,
"buildStatus": "Success",
"codeRepos": [
{
"url": "https://mygithub.com/myOrg/myRepo",
"branch": "refs/remotes/origin/master",
"type": "GIT"
}
],
"sourceChangeSet": []
}
}
]
=====================================================
== File: src/test/resources/collectors/coll.json
=====================================================
[
{
"id" : "5ba136220be2d32568777fa4",
"_class" : "com.capitalone.dashboard.model.Collector",
"name" : "Hudson",
"collectorType" : "Build",
"enabled" : true,
"online" : true,
"errors" : [],
"uniqueFields" : {
"jobName" : "",
"jobUrl" : ""
},
"allFields" : {
"jobName" : "",
"jobUrl" : "",
"instanceUrl" : ""
},
"lastExecuted" : 1537838340823,
"searchFields" : [
"options.jobName",
"niceName"
]
},
{
"id" : "5ba136290be2d32568777fa8",
"_class" : "com.capitalone.dashboard.model.Collector",
"name" : "Sonar",
"collectorType" : "CodeQuality",
"enabled" : true,
"online" : true,
"errors" : [],
"uniqueFields" : {},
"allFields" : {},
"lastExecuted" : 1537838341109,
"searchFields" : [
"description"
]
},
{
"id" : "5ba155280be2d339d2f2461e",
"_class" : "com.capitalone.dashboard.model.Collector",
"name" : "Product",
"collectorType" : "Product",
"enabled" : true,
"online" : true,
"errors" : [],
"uniqueFields" : {},
"allFields" : {},
"lastExecuted" : 0,
=====================================================
== File: src/test/resources/component/component.json
=====================================================
[
{
"id": "5ba155820be2d339d2f24626",
"_class": "com.capitalone.dashboard.model.Component",
"name": "Testing",
"collectorItems": {
"SCM": [
{
"id": "5ba16a200be2d349ddf7fc80",
"enabled": true,
"errors": [],
"pushed": false,
"collectorId": "5ba16a0b0be2d34a64291205",
"lastUpdated": 0,
"options": {
"password": "",
"personalAccessToken": "",
"branch": "master",
"userID": "",
"url": "https://mygithub.com/myOrg/myRepo"
}
}
],
"Build": [
{
"id": "5ba136220be2d32568777fa5",
"description": "job/c1usercheck/",
"niceName": "TopoJenkins",
"enabled": false,
"errors": [],
"pushed": true,
"collectorId": "5ba136220be2d32568777fa4",
"lastUpdated": 1537305331713,
"options": {
"jobName": "job/c1usercheck/",
"jobUrl": "http://localhost:8082/job/c1usercheck/",
"instanceUrl": "http://localhost:8082/"
}
}
],
"CodeQuality": [
{
"id": "5ba136290be2d32568777fa9",
"description": "C1 Custom Env Var Inject",
"niceName": "TopoJenkins",
"enabled": false,
"errors": [],
"pushed": true,
"collectorId": "5ba136290be2d32568777fa8",
"lastUpdated": 1537305335290,
=====================================================
== File: src/test/resources/builds/builds.json
=====================================================
[
{
"id": "5ba51c320be2d3f98f795044",
"_class": "com.capitalone.dashboard.model.Build",
"collectorItemId": "5ba136220be2d32568777fa5",
"timestamp": 1537547314372,
"number": "148",
"buildUrl": "http://localhost:8082/job/c1usercheck/148/",
"startTime": 1537547300387,
"endTime": 1537547314338,
"duration": 13951,
"buildStatus": "Success",
"codeRepos": [
{
"url": "https://mygithub.com/myOrg/myRepo",
"branch": "refs/remotes/origin/master",
"type": "GIT"
}
],
"sourceChangeSet": []
},
{
"id": "5ba51d120be2d3f98f79504c",
"_class": "com.capitalone.dashboard.model.Build",
"collectorItemId": "5ba136220be2d32568777fa5",
"timestamp": 1537547538123,
"number": "149",
"buildUrl": "http://localhost:8082/job/c1usercheck/149/",
"startTime": 1537547525358,
"endTime": 1537547538098,
"duration": 12740,
"buildStatus": "Success",
"codeRepos": [
{
"url": "https://mygithub.com/myOrg/myRepo",
"branch": "refs/remotes/origin/master",
"type": "GIT"
}
],
"sourceChangeSet": []
},
{
"id": "5ba520c40be2d3f98f795054",
"_class": "com.capitalone.dashboard.model.Build",
"collectorItemId": "5ba136220be2d32568777fa5",
"timestamp": 1537548484349,
"number": "150",
"buildUrl": "http://localhost:8082/job/c1usercheck/150/",
"startTime": 1537548473383,
"endTime": 1537548484312,
=====================================================
== File: src/test/resources/librarypolicy/librarypolicy.json
=====================================================
[{
"id": "5ad626cfc23b392c8f61ea1b",
"_class": "com.capitalone.dashboard.model.LibraryPolicyResult",
"collectorItemId": "5ad5f605c23b391cfa1c01a4",
"timestamp": 1523984079768,
"evaluationTimestamp": 1522879797193,
"threats": {
"License": [
{
"level": "Medium",
"components": [
"com.amazonaws:aws-java-sdk-sqs-1.11.28.jar",
"ch.qos.logback:logback-classic-1.1.11.jar",
"ch.qos.logback:logback-core-1.1.11.jar",
"junit:junit-4.11.jar",
"highcharts:highcharts-3d-4.2.1.js",
"highcharts:highcharts-4.2.1.js",
"net.masterthought:cucumber-reporting-2.0.0.jar"
],
"count": 7
},
{
"level": "None",
"components": [
"org.springframework:spring-test-4.3.10.RELEASE.jar",
"org.jsoup:jsoup-1.8.3.jar",
"com.amazonaws:jmespath-java-1.0.jar",
"org.springframework.retry:spring-retry-1.2.1.RELEASE.jar",
"com.amazonaws:aws-java-sdk-kms-1.11.28.jar",
"com.fasterxml.jackson.core:jackson-core-2.8.9.jar",
"org.springframework.batch:spring-batch-infrastructure-3.0.8.RELEASE.jar",
"com.fasterxml.jackson.core:jackson-annotations-2.8.0.jar",
"com.google.code.gson:gson-2.8.1.jar",
"org.slf4j:slf4j-api-1.7.25.jar",
"org.springframework.boot:spring-boot-test-autoconfigure-1.5.6.RELEASE.jar",
"com.vaadin.external.google:android-json-0.0.20131108.vaadin1.jar",
"com.jayway.jsonpath:json-path-2.2.0.jar",
"org.springframework.batch:spring-batch-core-3.0.8.RELEASE.jar",
"org.apache.logging.log4j:log4j-api-2.7.jar",
"org.apache.httpcomponents:httpclient-4.5.3.jar",
"org.springframework.boot:spring-boot-starter-logging-1.5.6.RELEASE.jar",
"org.assertj:assertj-core-2.6.0.jar",
"org.slf4j:jul-to-slf4j-1.7.25.jar",
"jquery:jquery-1.12.1.min.js",
":aws-temporary-credentials-provider-2.1.3.jar",
"com.fasterxml.jackson.core:jackson-databind-2.8.9.jar",
"org.springframework:spring-beans-4.3.10.RELEASE.jar",
"org.apache.velocity:velocity-1.7.jar",
"org.springframework.boot:spring-boot-starter-test-1.5.6.RELEASE.jar",
"commons-logging:commons-logging-1.1.3.jar",
=====================================================
== File: src/test/resources/dashboard/dashboard.json
=====================================================
[
{
"id": "5ba155820be2d339d2f24627",
"_class": "com.capitalone.dashboard.model.Dashboard",
"template": "widgets",
"title": "TestPlugin",
"widgets": [
{
"id": "5ba16a200be2d349ddf7fc82",
"name": "repo",
"componentId": "5ba155820be2d339d2f24626",
"options": {
"password": "",
"id": "repo0",
"personalAccessToken": "",
"branch": "master",
"userID": "",
"url": "https://mygithub.com/myOrg/myRepo"
}
},
{
"id": "5ba16af70be2d34a77757045",
"name": "build",
"componentId": "5ba155820be2d339d2f24626",
"options": {
"buildDurationThreshold": 3,
"id": "build0",
"consecutiveFailureThreshold": 5
}
},
{
"id": "5ba16b060be2d34a77757048",
"name": "codeanalysis",
"componentId": "5ba155820be2d339d2f24626",
"options": {
"id": "codeanalysis0"
}
}
],
"owners": [
{
"username": "topo",
"authType": "STANDARD"
}
],
"type": "Team",
"application": {
"name": "Testing",
"components": [
{
=====================================================
== File: src/test/resources/codequality/codequality.json
=====================================================
[
{
"id": "5ba950da0be2d3128858d322",
"_class": "com.capitalone.dashboard.model.CodeQuality",
"collectorItemId": "5ba136290be2d32568777fa9",
"timestamp": 1537822938615,
"name": "C1 Custom Env Var Inject",
"url": "http://localhost:9000/dashboard/index/org.jenkins-ci.plugins:CustomC1EnvVarInject",
"type": "StaticAnalysis",
"version": "1.0.0-SNAPSHOT",
"buildId": "5ba51c320be2d3f98f795044",
"metrics": [
{
"name": "coverage",
"value": "0.0",
"formattedValue": "0.0%"
},
{
"name": "new_vulnerabilities",
"value": "",
"formattedValue": ""
},
{
"name": "violations",
"value": "28",
"formattedValue": "28"
},
{
"name": "quality_gate_details",
"value": "{\"level\":\"ERROR\",\"conditions\":[{\"metric\":\"new_security_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"new_reliability_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"new_maintainability_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"coverage\",\"op\":\"LT\",\"warning\":\"\",\"error\":\"80\",\"actual\":\"0.0\",\"level\":\"ERROR\"}]}",
"formattedValue": "{\"level\":\"ERROR\",\"conditions\":[{\"metric\":\"new_security_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"new_reliability_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"new_maintainability_rating\",\"op\":\"GT\",\"period\":1,\"error\":\"1\",\"actual\":\"1\",\"level\":\"OK\"},{\"metric\":\"coverage\",\"op\":\"LT\",\"warning\":\"\",\"error\":\"80\",\"actual\":\"0.0\",\"level\":\"ERROR\"}]}%"
},
{
"name": "sqale_index",
"value": "203",
"formattedValue": "3h 23min"
},
{
"name": "critical_violations",
"value": "1",
"formattedValue": "1"
},
{
"name": "blocker_violations",
"value": "0",
"formattedValue": "0"
},
{
"name": "new_major_violations",
"value": "",
=====================================================
== File: src/test/resources/test_results/test_results.json
=====================================================
[
{
"id" : "5803cd02edb9650aa33d205a",
"collectorItemId" : "57f2a0193b55670a9e06d63a",
"timestamp" : 1476644087024,
"executionId" : "94",
"buildId" : "5803cd02edb9650aa33d2059",
"description" : " TEST-UI",
"url" : "https://myjenkins.com/myjenkins/job/TEST-UI/",
"startTime" : 1476643852954,
"endTime" : 1476644086910,
"duration" : 233956,
"failureCount" : 0,
"successCount" : 1,
"skippedCount" : 0,
"totalCount" : 1,
"unknownStatusCount" : 0,
"type" : "Functional",
"targetAppName" : " -UI-SLATE",
"targetEnvName" : "QAMB",
"testCapabilities" : [
{
"timestamp" : 0,
"executionId" : "94",
"description" : "/json",
"startTime" : 0,
"endTime" : 0,
"duration" : 161998,
"failedTestSuiteCount" : 0,
"successTestSuiteCount" : 1,
"skippedTestSuiteCount" : 0,
"totalTestSuiteCount" : 1,
"unknownStatusTestSuiteCount" : 0,
"status" : "Success",
"type" : "Functional",
"testSuites" : [
{
"id" : "validate-auto-loan-account-details",
"description" : "Feature:Validate Auto Loan Account Details",
"type" : "Functional",
"startTime" : 0,
"endTime" : 0,
"duration" : 161998,
"totalTestCaseCount" : 2,
"failedTestCaseCount" : 0,
"successTestCaseCount" : 2,
"skippedTestCaseCount" : 0,
"unknownStatusCount" : 0,
"status" : "Success",
=====================================================
== File: src/test/resources/collector_items/items.json
=====================================================
[
{
"id": "5ba136220be2d32568777fa5",
"_class": "com.capitalone.dashboard.model.CollectorItem",
"description": "job/c1usercheck/",
"niceName": "TopoJenkins",
"enabled": false,
"errors": [],
"pushed": true,
"collectorId": "5ba136220be2d32568777fa4",
"lastUpdated": 1537548484342,
"options": {
"jobName": "job/c1usercheck/",
"jobUrl": "http://localhost:8082/job/c1usercheck/",
"instanceUrl": "http://localhost:8082/"
}
},
{
"id": "5ba136220be2d32568777fa6",
"_class": "com.capitalone.dashboard.model.CollectorItem",
"description": "job/c1usercheck2/",
"niceName": "TopoJenkins",
"enabled": false,
"errors": [],
"pushed": true,
"collectorId": "5ba136220be2d32568777fa4",
"lastUpdated": 1537548484342,
"options": {
"jobName": "job/c1usercheck2/",
"jobUrl": "http://localhost:8082/job/c1usercheck2/",
"instanceUrl": "http://localhost:8082/"
}
},
{
"id": "5ba136290be2d32568777fa9",
"_class": "com.capitalone.dashboard.model.CollectorItem",
"description": "C1 Custom Env Var Inject",
"niceName": "TopoJenkins",
"enabled": false,
"errors": [],
"pushed": true,
"collectorId": "5ba136290be2d32568777fa8",
"lastUpdated": 1537548487364,
"options": {
"projectName": "C1 Custom Env Var Inject",
"projectId": "AWUfseU7tTiUsfWMVoi8",
"instanceUrl": "http://localhost:9000"
}
},
{
=====================================================
== File: src/test/resources/securityscan/securityscan.json
=====================================================
[
{
"_id": "5ac4f4e95470fb75445daaf6",
"collectorItemId": "5b4e524333ec296b81c3935f",
"timestamp": 1522855896054,
"type": "SecurityAnalysis",
"metrics": [
{
"name": "Score",
"value": "89",
"formattedValue": "89"
},
{
"name": "Low",
"value": "1",
"formattedValue": "1",
"status": "Ok"
},
{
"name": "Medium",
"value": "4",
"formattedValue": "4",
"status": "Warning"
},
{
"name": "Critical",
"value": "3",
"formattedValue": "3",
"status": "Alert"
},
{
"name": "High",
"value": "21",
"formattedValue": "21",
"status": "Alert"
}
]
}
]
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/FongoBaseRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import org.junit.Rule;
import org.junit.runner.RunWith;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.github.fakemongo.junit.FongoRule;
@ContextConfiguration(classes = { FongoConfig.class })
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext
public abstract class FongoBaseRepositoryTest {
@Rule
public FongoRule fongoRule = new FongoRule();
}
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/CollectorTaskTests.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.collector.CollectorTask;
import com.capitalone.dashboard.model.Collector;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class CollectorTaskTests {
@Mock private TaskScheduler taskScheduler;
@Mock private BaseCollectorRepository<Collector> baseCollectorRepository;
private CollectorTask<Collector> task;
private static final String COLLECTOR_NAME = "Test Collector";
@Before
public void init() {
task = new TestCollectorTask();
}
@Test
public void run_collectorNotRegistered_savesNewCollector() {
Collector c = new Collector();
when(baseCollectorRepository.findByName(COLLECTOR_NAME)).thenReturn(null);
when(baseCollectorRepository.save(any(Collector.class))).thenReturn(c);
task.run();
verify(baseCollectorRepository).save(any(Collector.class));
}
@Test
public void run_enabled() {
Collector c = new Collector();
c.setEnabled(true);
long prevLastExecuted = c.getLastExecuted();
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/CollectorItemRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.testutil.FongoConfig;
import com.capitalone.dashboard.util.LoadTestData;
import com.github.fakemongo.junit.FongoRule;
import com.google.common.collect.Lists;
import org.bson.types.ObjectId;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {FongoConfig.class})
@DirtiesContext
public class CollectorItemRepositoryTest {
@Rule
public FongoRule fongoRule = new FongoRule();
@Autowired
private CollectorItemRepository collectorItemRepository;
@Test
public void findAllByOptionNameValueAndCollectorIdsInReturns0() throws IOException {
collectorItemRepository.deleteAll();
LoadTestData.loadCollectorItems(collectorItemRepository);
Iterable<CollectorItem> items = collectorItemRepository.findAllByOptionNameValueAndCollectorIdsIn("jobName", "job/", Collections.singletonList(new ObjectId("5ba136220be2d32568777fa4")));
List<CollectorItem> itemList = Lists.newArrayList(items);
assertEquals(itemList.size(),0);
}
@Test
public void findAllByOptionNameValueAndCollectorIdsInReturns1() throws IOException {
collectorItemRepository.deleteAll();
LoadTestData.loadCollectorItems(collectorItemRepository);
Iterable<CollectorItem> items = collectorItemRepository.findAllByOptionNameValueAndCollectorIdsIn("jobName", "job/c1usercheck/", Collections.singletonList(new ObjectId("5ba136220be2d32568777fa4")));
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/FongoConfig.java
=====================================================
package com.capitalone.dashboard.repository;
import org.springframework.context.annotation.Bean;
import com.capitalone.dashboard.config.MongoConfig;
import com.github.fakemongo.Fongo;
import com.mongodb.MongoClient;
public class FongoConfig extends MongoConfig {
@Override
@Bean
public MongoClient mongo() throws Exception {
return new Fongo(getDatabaseName()).getMongo();
}
@Override
protected String getDatabaseName() {
return "test-db";
}
}
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/TemplateRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Template;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class TemplateRepositoryTest extends FongoBaseRepositoryTest {
private static Template mockTemplate;
@Autowired
private TemplateRepository templateRepository;
@Before
public void setUp() {
mockTemplate = new Template("template1", getWidgetsAndOrder(), getWidgetsAndOrder());
}
@After
public void tearDown() {
mockTemplate = null;
templateRepository.deleteAll();
}
@Test
public void validate_save() {
templateRepository.save(mockTemplate);
assertTrue(
"Happy-path MongoDB connectivity validation for the FeatureRepository has failed",
templateRepository.findAll().iterator().hasNext());
}
@Test
public void validate_get() {
templateRepository.save(mockTemplate);
Template actual = templateRepository.findByTemplate("template1");
assertEquals(actual.getTemplate(), mockTemplate.getTemplate());
}
@Test
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/AuthenticationRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Field;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import com.capitalone.dashboard.model.Authentication;
public class AuthenticationRepositoryTest extends FongoBaseRepositoryTest {
private static int testNumber = 0;
private static String username ;
@Before
public void updateUsername(){
username = "usernameTest" + testNumber;
testNumber++;
}
@Autowired
private AuthenticationRepository authenticationRepository;
/*
* This test checks that adding a duplicate username will create an exception
*/
@Test(expected=DuplicateKeyException.class)
public void createDuplicateUserTest() {
String username = "username";
Authentication user1 = new Authentication(username, "pass1");
authenticationRepository.save(user1);
Authentication user2 = new Authentication(username, "pass2");
// This line should throw a DuplicateKeyException
authenticationRepository.save(user2);
}
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/FeatureRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.capitalone.dashboard.model.Feature;
public class FeatureRepositoryTest extends FongoBaseRepositoryTest {
private static Feature mockV1Feature;
private static Feature mockJiraFeature;
private static Feature mockJiraFeature2;
private static Feature mockJiraFeature3;
private static Feature mockJiraFeature4;
private static final String generalUseDate = "2015-11-01T00:00:00Z";
private static final String generalUseDate2 = "2015-12-01T00:00:00Z";
private static final String generalUseDate3 = "2015-12-15T00:00:00Z";
private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
private static Calendar cal = Calendar.getInstance();
private static final String maxDateWinner = df.format(new Date());
private static String maxDateLoser = new String();
private static String currentSprintEndDate = new String();
private static final ObjectId jiraCollectorId = new ObjectId();
// private static final ObjectId v1CollectorId = new ObjectId();
@Autowired
private FeatureRepository featureRepo;
@Before
public void setUp() {
// Date-time modifications
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1);
maxDateLoser = df.format(cal.getTime());
cal.add(Calendar.DAY_OF_YEAR, +13);
currentSprintEndDate = df.format(cal.getTime());
// Helper mock data
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/ScopeOwnerRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.ScopeOwnerCollectorItem;
public class ScopeOwnerRepositoryTest extends FongoBaseRepositoryTest {
private static ScopeOwnerCollectorItem mockV1ScopeOwner;
private static ScopeOwnerCollectorItem mockJiraScopeOwner;
private static ScopeOwnerCollectorItem mockJiraScopeOwner2;
private static CollectorItem mockBadItem;
private static final String generalUseDate = "2015-11-01T00:00:00Z";
private static final String olderThanGeneralUseDate = "2015-10-30T00:00:00Z";
private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
private static Calendar cal = Calendar.getInstance();
private static final String maxDateWinner = df.format(new Date());
private static String maxDateLoser = new String();
private static final ObjectId jiraCollectorId = new ObjectId();
private static final ObjectId v1CollectorId = new ObjectId();
@Autowired
private ScopeOwnerRepository scopeOwnerRepo;
@Autowired
private CollectorItemRepository badItemRepo;
@Before
public void setUp() {
// Date-time modifications
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1);
maxDateLoser = df.format(cal.getTime());
// VersionOne Mock Scope
mockV1ScopeOwner = new ScopeOwnerCollectorItem();
mockV1ScopeOwner.setCollectorId(v1CollectorId);
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.testutil.FongoConfig;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
import java.util.Objects;
import static org.junit.Assert.*;
public class RelatedCollectorItemRepositoryTest extends FongoBaseRepositoryTest {
@Autowired
private RelatedCollectorItemRepository relatedCollectorItemRepository;
@Test
public void saveRelatedItems() {
relatedCollectorItemRepository.deleteAll();
ObjectId left = ObjectId.get();
ObjectId right = ObjectId.get();
relatedCollectorItemRepository.saveRelatedItems(left, right, "some source", "some reason");
List<RelatedCollectorItem> relatedCollectorItemList = Lists.newArrayList(relatedCollectorItemRepository.findAll());
assertFalse(CollectionUtils.isEmpty(relatedCollectorItemList));
assertEquals(1, relatedCollectorItemList.size());
assertEquals(relatedCollectorItemList.get(0).getLeft(), left);
assertEquals(relatedCollectorItemList.get(0).getRight(), right);
assertTrue(relatedCollectorItemList.get(0).getReason().equalsIgnoreCase("some reason"));
assertTrue(relatedCollectorItemList.get(0).getSource().equalsIgnoreCase("some source"));
}
@Test
public void saveRelatedItemsDuplicate() {
relatedCollectorItemRepository.deleteAll();
ObjectId left = ObjectId.get();
ObjectId right = ObjectId.get();
RelatedCollectorItem rc = new RelatedCollectorItem();
rc.setLeft(left);
rc.setRight(right);
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/DashboardCreateTests.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.*;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class DashboardCreateTests extends FongoBaseRepositoryTest {
@Autowired
private DashboardRepository dashboardRepository;
@Autowired
private ComponentRepository componentRepository;
@Autowired
private CmdbRepository cmdbRepository;
@Test
public void createTeamDashboardTest() {
Component component = new Component("Jay's component");
component.setOwner("Jay");
component = componentRepository.save(component);
System.out.println(component.getId());
Cmdb configItemApp = new Cmdb();
configItemApp.setConfigurationItem("ASVTEST");
configItemApp = cmdbRepository.save(configItemApp);
Cmdb configItemComp = new Cmdb();
configItemComp.setConfigurationItem("BAPTEST");
configItemComp = cmdbRepository.save(configItemComp);
Application application = new Application("Jay's App", component);
List<String> activeWidgets = new ArrayList<>();
List<Owner> owners = new ArrayList<Owner>();
owners.add(new Owner("owner", AuthType.STANDARD));
Dashboard dashboard = new Dashboard("Topo", "Jays's Dashboard", application, owners, DashboardType.Team, configItemApp.getConfigurationItem(), configItemComp.getConfigurationItem(), activeWidgets, false, ScoreDisplayType.HEADER);
Widget build = new Widget();
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/TeamRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.Team;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class TeamRepositoryTest extends FongoBaseRepositoryTest {
private static Team mockV1Team;
private static Team mockJiraTeam;
private static Team mockJiraTeam2;
private static CollectorItem mockBadItem;
private static final String generalUseDate = "2015-11-01T00:00:00Z";
private static final String olderThanGeneralUseDate = "2015-10-30T00:00:00Z";
private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
private static Calendar cal = Calendar.getInstance();
private static final String maxDateWinner = df.format(new Date());
private static String maxDateLoser = new String();
private static final ObjectId jiraCollectorId = new ObjectId();
private static final ObjectId v1CollectorId = new ObjectId();
@Autowired
private TeamRepository teamRepo;
@Autowired
private CollectorItemRepository badItemRepo;
@Before
public void setUp() {
// Date-time modifications
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1);
maxDateLoser = df.format(cal.getTime());
// VersionOne Mock Scope
mockV1Team = new Team("", "");
mockV1Team.setCollectorId(v1CollectorId);
=====================================================
== File: src/test/java/com/capitalone/dashboard/repository/ScopeRepositoryTest.java
=====================================================
package com.capitalone.dashboard.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.bson.types.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.capitalone.dashboard.model.Scope;
public class ScopeRepositoryTest extends FongoBaseRepositoryTest {
private static Scope mockV1Scope;
private static Scope mockJiraScope;
private static Scope mockJiraScope2;
private static final String generalUseDate = "2015-11-01T00:00:00Z";
private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
private static Calendar cal = Calendar.getInstance();
private static final String maxDateWinner = df.format(new Date());
private static String maxDateLoser = new String();
private static String currentScopeEndDate = new String();
private static final ObjectId jiraCollectorId = new ObjectId();
private static final ObjectId v1CollectorId = new ObjectId();
@Autowired
private ScopeRepository scopeRepo;
@Before
public void setUp() {
// Date-time modifications
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1);
maxDateLoser = df.format(cal.getTime());
cal.add(Calendar.DAY_OF_YEAR, +13);
currentScopeEndDate = df.format(cal.getTime());
// VersionOne Mock Scope
mockV1Scope = new Scope();
mockV1Scope.setCollectorId(v1CollectorId);
mockV1Scope.setIsDeleted("False");
mockV1Scope.setChangeDate(maxDateLoser);
mockV1Scope.setAssetState("Active");
mockV1Scope.setBeginDate(maxDateLoser);
=====================================================
== File: src/test/java/com/capitalone/dashboard/util/HygieiaUtilsTest.java
=====================================================
package com.capitalone.dashboard.util;
import org.junit.Assert;
import org.junit.Test;
public class HygieiaUtilsTest {
@Test
public void checkForEmptyStringValuesTest() {
boolean result = HygieiaUtils.checkForEmptyStringValues("", "test1", "test2");
Assert.assertTrue(result);
result = HygieiaUtils.checkForEmptyStringValues("test0", "test1", "test2");
Assert.assertFalse(result);
}
}
=====================================================
== File: src/test/java/com/capitalone/dashboard/util/TestUtils.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.BinaryArtifact;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.BuildStatus;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.CommitType;
import com.capitalone.dashboard.model.EnvironmentStage;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineCommit;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.RepoBranch;
import com.capitalone.dashboard.model.SCM;
import org.bson.types.ObjectId;
import org.junit.Ignore;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Created by syq410 on 2/23/17.
*/
@Ignore
public class TestUtils {
private static final ObjectId DASHBOARD_ID = new ObjectId();
public static Commit createCommit(String revisionNumber,String scmUrl) {
Commit commit = new Commit();
commit.setScmRevisionNumber(revisionNumber);
commit.setCollectorItemId(ObjectId.get());
commit.setType(CommitType.New);
commit.setScmUrl(scmUrl);
return commit;
}
public static Pipeline getPipeline(ObjectId collectorItemId) {
Pipeline pipeline = new Pipeline();
pipeline.addCommit(PipelineStage.COMMIT.getName(), createPipelineCommit("scmRev3"));
EnvironmentStage environmentStage = new EnvironmentStage();
environmentStage.setLastArtifact(getBinaryArtifact());
pipeline.getEnvironmentStageMap().put("DEV",environmentStage);
Set<Build> failedBuilds = new HashSet<>();
Build failedBuild = createBuild();
failedBuild.setCollectorItemId(collectorItemId);
=====================================================
== File: src/test/java/com/capitalone/dashboard/util/EncryptionTests.java
=====================================================
package com.capitalone.dashboard.util;
import org.junit.Test;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
public class EncryptionTests {
private final String THING_TO_BE_ENCRYPTED = "AKIAJ24MI4VLOIR72NVA";
private final String A_GOOD_STRING_KEY = "5XBoZ7li2W5wzhOULEqtQzdkufjsVFs4";
private final String A_LONG_KEY = "0ED1C7B771C9BBAB2583C364AFE8FB0C2F23A6FC8157EE3601ABB53D9CEA9893";
private final String A_SHORT_KEY = "F55CC56E8DB6056EB4085263";
private final String A_BAD_STRING_KEY = "c/t/nuBFwTgvB+lwzS/q5W0ZkQhhxCB1";
private static final String ALGO = "DESede";
private static final SecretKey GOOD_KEY = getKey();
private static final SecretKey BAD_KEY = getKey();
private static SecretKey getKey() {
SecretKey key = null;
try {
key = KeyGenerator.getInstance(ALGO).generateKey();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// String stringKey = Base64.encodeBase64String(key.getEncoded());
return key;
}
@Test
public void testGetStringKey() {
String key = null;
try {
key = Encryption.getStringKey();
} catch (EncryptionException e) {
e.printStackTrace();
}
assertNotEquals(null, key);
assertNotEquals("", key);
}
@Test
public void testGetSecretKey() {
SecretKey key = null;
try {
=====================================================
== File: src/test/java/com/capitalone/dashboard/util/PipelineUtilsTest.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.*;
import com.capitalone.dashboard.repository.CommitRepository;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.capitalone.dashboard.util.TestUtils.createBuild;
import static com.capitalone.dashboard.util.TestUtils.createCommit;
import static com.capitalone.dashboard.util.TestUtils.getPipeline;
import static com.capitalone.dashboard.util.TestUtils.getScm;
import static org.junit.Assert.assertEquals;
/**
* Created by syq410 on 2/23/17.
*/
@RunWith(MockitoJUnitRunner.class)
public class PipelineUtilsTest {
private static final ObjectId DASHBOARD_ID = new ObjectId();
@Mock
private CommitRepository commitRepository;
@Test
public void testOrderForStages() {
Map<String, String> ordermap = PipelineUtils.getOrderForStages(setupDashboard());
assertEquals(ordermap.get("0"), "Commit");
assertEquals(ordermap.get("1"), "Build");
assertEquals(ordermap.get("2"), "dev");
assertEquals(ordermap.get("3"), "qa");
assertEquals(ordermap.get("4"), "int");
}
private Dashboard setupDashboard() {
ObjectId configItemAppId = new ObjectId();
ObjectId configItemComponetId = new ObjectId();
List<String> activeWidgets = new ArrayList<>();
List<Owner> owners = new ArrayList<Owner>();
owners.add(new Owner("owner", AuthType.STANDARD));
=====================================================
== File: src/test/java/com/capitalone/dashboard/util/DashboardUtilsTest.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.FongoBaseRepositoryTest;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Arrays;
import java.util.Set;
import static org.junit.Assert.*;
public class DashboardUtilsTest extends FongoBaseRepositoryTest{
@Autowired
private ComponentRepository componentRepository;
@Autowired
private CollectorRepository collectorRepository;
@Autowired
private CollectorItemRepository collectorItemRepository;
@Test
public void getUniqueCollectorItemIDsFromAllComponents() throws Exception {
Component component1 = getComponent("TestComponent1");
Collector collector1 = getCollector("TestCollector1",CollectorType.Build);
CollectorItem collectorItem1 = getCollectorItem("TestCollectorItem1",collector1);
component1.addCollectorItem(collector1.getCollectorType(), collectorItem1);
Collector collector11 = getCollector("TestCollector1",CollectorType.SCM);
CollectorItem collectorItem11 = getCollectorItem("TestCollectorItem11",collector11);
component1.addCollectorItem(collector11.getCollectorType(), collectorItem11);
Component component2 = getComponent("TestComponent2");
CollectorItem collectorItem2 = getCollectorItem("TestCollectorItem2",collector11);
component2.addCollectorItem(collector11.getCollectorType(), collectorItem2);
Component component3 = getComponent("TestComponent2");
component3.addCollectorItem(collector11.getCollectorType(), collectorItem2);
componentRepository.save(Arrays.asList(component1,component2,component3));
=====================================================
== File: src/test/java/com/capitalone/dashboard/util/LoadTestData.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.LibraryPolicyResult;
import com.capitalone.dashboard.model.TestResult;
import com.capitalone.dashboard.repository.BuildRepository;
import com.capitalone.dashboard.repository.CodeQualityRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.LibraryPolicyResultsRepository;
import com.capitalone.dashboard.repository.TestResultRepository;
import com.capitalone.dashboard.testutil.GsonUtil;
import com.google.common.io.Resources;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.util.List;
public class LoadTestData {
public static void loadDashBoard(DashboardRepository dashboardRepository) throws IOException {
Gson gson = GsonUtil.getGson();
String json = IOUtils.toString(Resources.getResource("./dashboard/dashboard.json"));
List<Dashboard> dashboards = gson.fromJson(json, new TypeToken<List<Dashboard>>(){}.getType());
dashboardRepository.save(dashboards);
}
public static void loadCollector (CollectorRepository collectorRepository) throws IOException {
Gson gson = GsonUtil.getGson();
String json = IOUtils.toString(Resources.getResource("./collectors/coll.json"));
List<Collector> collector = gson.fromJson(json, new TypeToken<List<Collector>>(){}.getType());
collectorRepository.save(collector);
}
public static void loadComponent(ComponentRepository componentRepository) throws IOException {
Gson gson = GsonUtil.getGson();
String json = IOUtils.toString(Resources.getResource("./component/component.json"));
List<Component> components = gson.fromJson(json, new TypeToken<List<Component>>(){}.getType());
componentRepository.save(components);
}
=====================================================
== File: src/test/java/com/capitalone/dashboard/util/GitBranchSpecTest.java
=====================================================
package com.capitalone.dashboard.util;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class GitBranchSpecTest {
@Test
public void testMatch() {
GitBranchSpec l = new GitBranchSpec("master");
assertTrue(l.matches("origin/master"));
assertFalse(l.matches("origin/something/master"));
assertTrue(l.matches("master"));
assertFalse(l.matches("dev"));
GitBranchSpec est = new GitBranchSpec("origin/*/dev");
assertFalse(est.matches("origintestdev"));
assertTrue(est.matches("origin/test/dev"));
assertFalse(est.matches("origin/test/release"));
assertFalse(est.matches("origin/test/somthing/release"));
GitBranchSpec s = new GitBranchSpec("origin/*");
assertTrue(s.matches("origin/master"));
GitBranchSpec m = new GitBranchSpec("**/magnayn/*");
assertTrue(m.matches("origin/magnayn/b1"));
assertTrue(m.matches("remote/origin/magnayn/b1"));
assertTrue(m.matches("remotes/origin/magnayn/b1"));
GitBranchSpec n = new GitBranchSpec("*/my.branch/*");
assertTrue(n.matches("origin/my.branch/b1"));
assertFalse(n.matches("origin/my-branch/b1"));
assertFalse(n.matches("remote/origin/my.branch/b1"));
assertTrue(n.matches("remotes/origin/my.branch/b1"));
GitBranchSpec o = new GitBranchSpec("**");
assertTrue(o.matches("origin/my.branch/b1"));
assertTrue(o.matches("origin/my-branch/b1"));
assertTrue(o.matches("remote/origin/my.branch/b1"));
=====================================================
== File: src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskTwoWithGenericItem.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.GenericCollectorItem;
import com.capitalone.dashboard.repository.BaseCollectorRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.GenericCollectorItemRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class TestCollectorTaskTwoWithGenericItem extends CollectorTaskWithGenericItem<Collector> {
private final CollectorRepository collectorRepository;
@Autowired
public TestCollectorTaskTwoWithGenericItem(TaskScheduler taskScheduler, CollectorItemRepository collectorItemRepository, GenericCollectorItemRepository genericCollectorItemRepository, RelatedCollectorItemRepository relatedCollectorItemRepository,
CollectorRepository collectorRepository) {
super(taskScheduler, "MyTool", collectorItemRepository, genericCollectorItemRepository, relatedCollectorItemRepository);
this.collectorRepository = collectorRepository;
}
@Override
public Map<String, Object> getGenericCollectorItemOptions(String serverUrl, GenericCollectorItem genericCollectorItem) {
Map<String, Object> options = new HashMap<>();
options.put("projectName", "C1 Custom Env Var Inject");
options.put("instanceUrl", "http://localhost:9000");
return options;
}
@Override
public Collector getCollector() {
Collector collector = new Collector();
collector.setId(new ObjectId("5ba136290be2d32568777fa8"));
collector.setName("MyTool");
return collector;
}
@Override
public BaseCollectorRepository<Collector> getCollectorRepository() {
return collectorRepository;
}
=====================================================
== File: src/test/java/com/capitalone/dashboard/collector/CollectorTaskTest.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.repository.*;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.scheduling.TaskScheduler;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class CollectorTaskTest {
@Mock private TaskScheduler taskScheduler;
private static final String COLLECTOR_NAME = "Test Collector";
private CollectorTask<Collector> collector;
@Before
public void init() {
collector = new CollectorTaskTest.TestCollectorTask();
}
@Test
public void throttleRequestsTest_ratelimit_exceeded() {
long startTime = System.currentTimeMillis() - 500;
int requestCount = 5;
long waitTime = 500;
int requestRateLimit = 3;
long requestRateLimitTimeWindow = 1000;
CollectorTask<Collector> collectorSpy = Mockito.spy(collector);
boolean result = collectorSpy.throttleRequests(startTime, requestCount,
waitTime, requestRateLimit,
requestRateLimitTimeWindow);
assertEquals(true, result);
verify(collectorSpy, times(1)).sleep(Mockito.anyLong());
}
@Test
public void throttleRequestsTest_ratelimit_not_exceeded() {
long startTime = System.currentTimeMillis() - 500;
int requestCount = 2;
long waitTime = 500;
=====================================================
== File: src/test/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItemTest.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.GenericCollectorItem;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.GenericCollectorItemRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import com.capitalone.dashboard.testutil.BaseCollectorTestConfig;
import com.capitalone.dashboard.testutil.FongoConfig;
import com.capitalone.dashboard.util.LoadTestData;
import com.github.fakemongo.junit.FongoRule;
import com.google.common.collect.Lists;
import org.bson.types.ObjectId;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {FongoConfig.class, BaseCollectorTestConfig.class})
public class CollectorTaskWithGenericItemTest {
@Rule
public FongoRule fongoRule = new FongoRule();
@Autowired
private CollectorItemRepository collectorItemRepository;
@Autowired
private GenericCollectorItemRepository genericCollectorItemRepository;
@Autowired
RelatedCollectorItemRepository relatedCollectorItemRepository;
@Autowired
TestCollectorTaskWithGenericItem testCollectorTaskWithGenericItem;
=====================================================
== File: src/test/java/com/capitalone/dashboard/collector/TestCollectorTaskWithGenericItem.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.GenericCollectorItem;
import com.capitalone.dashboard.repository.BaseCollectorRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.GenericCollectorItemRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class TestCollectorTaskWithGenericItem extends CollectorTaskWithGenericItem<Collector> {
private final CollectorRepository collectorRepository;
@Autowired
public TestCollectorTaskWithGenericItem(TaskScheduler taskScheduler, CollectorItemRepository collectorItemRepository, GenericCollectorItemRepository genericCollectorItemRepository, RelatedCollectorItemRepository relatedCollectorItemRepository,
CollectorRepository collectorRepository) {
super(taskScheduler, "Sonar", collectorItemRepository, genericCollectorItemRepository, relatedCollectorItemRepository);
this.collectorRepository = collectorRepository;
}
@Override
public Map<String, Object> getGenericCollectorItemOptions(String serverUrl, GenericCollectorItem genericCollectorItem) {
Map<String, Object> options = new HashMap<>();
options.put("projectName", "C1 Custom Env Var Inject");
options.put("instanceUrl", "http://localhost:9000");
return options;
}
@Override
public Collector getCollector() {
Collector collector = new Collector();
collector.setId(new ObjectId("5ba136290be2d32568777fa8"));
collector.setName("Sonar");
return collector;
}
@Override
public BaseCollectorRepository<Collector> getCollectorRepository() {
return collectorRepository;
}
=====================================================
== File: src/test/java/com/capitalone/dashboard/model/DashboardTest.java
=====================================================
package com.capitalone.dashboard.model;
import com.capitalone.dashboard.util.PipelineUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
@RunWith(MockitoJUnitRunner.class)
public class DashboardTest {
@Test
public void findEnvironmentMappings(){
Dashboard dashboard = makeTeamDashboard("template", "title", "appName","" ,"ASVTEST","BAPTEST", "comp1", "comp2");
dashboard.getWidgets().add(makePipelineWidget("DEV", "QA", null, null, "PROD"));
Widget buildWidget = new Widget();
buildWidget.setName("build");
dashboard.getWidgets().add(buildWidget);
Widget commitWidget = new Widget();
commitWidget.setName("repo");
dashboard.getWidgets().add(commitWidget);
Map<PipelineStage, String> expected = new HashMap<>();
expected.put(PipelineStage.valueOf("COMMIT"), "Commit");
expected.put(PipelineStage.valueOf("BUILD"), "Build");
expected.put(PipelineStage.valueOf("DEV"), "DEV");
expected.put(PipelineStage.valueOf("QA"), "QA");
expected.put(PipelineStage.valueOf("PROD"), "PROD");
Map<PipelineStage, String> actual = PipelineUtils.getStageToEnvironmentNameMap(dashboard);
assertEquals(expected, actual);
}
@Test
public void findEnvironmentMappings_no_mappings_configured(){
Dashboard dashboard = makeTeamDashboard("template", "title", "appName","","ASVTEST", "BAPTEST","comp1", "comp2");
Map<PipelineStage, String> expected = new HashMap<>();
Map<PipelineStage, String> actual = PipelineUtils.getStageToEnvironmentNameMap(dashboard);
assertEquals(expected, actual);
}
private Dashboard makeTeamDashboard(String template, String title, String appName, String owner, String configItemAppName, String configItemComponentName, String... compNames) {
=====================================================
== File: src/test/java/com/capitalone/dashboard/model/LibraryPolicyResultTest.java
=====================================================
package com.capitalone.dashboard.model;
import org.junit.Test;
import java.util.Objects;
import java.util.Set;
import static org.junit.Assert.*;
public class LibraryPolicyResultTest {
@Test
public void addThreat() {
LibraryPolicyResult result = new LibraryPolicyResult();
result.addThreat(LibraryPolicyType.License, LibraryPolicyThreatLevel.Critical, LibraryPolicyThreatDisposition.Open, "component1");
assertEquals(result.getThreats().size(), 1);
assertEquals(result.getThreats().keySet().size(), 1);
assertEquals(result.getThreats().values().size(), 1);
assertEquals(result.getThreats().keySet().iterator().next(), LibraryPolicyType.License);
Set<LibraryPolicyResult.Threat> threats = result.getThreats().get(LibraryPolicyType.License);
LibraryPolicyResult.Threat threat = threats.iterator().next();
assertEquals(threat.getCount(), 1);
assertEquals(threat.getLevel(), LibraryPolicyThreatLevel.Critical);
assertEquals(threat.getComponents().iterator().next(), "component1##Open");
assertEquals(threat.getDispositionCounts().size(), 1);
assertEquals(threat.getDispositionCounts().get(LibraryPolicyThreatDisposition.Open).intValue(), 1);
result.addThreat(LibraryPolicyType.License, LibraryPolicyThreatLevel.Critical, LibraryPolicyThreatDisposition.Open, "component2");
assertEquals(result.getThreats().size(), 1);
assertEquals(result.getThreats().keySet().size(), 1);
assertEquals(result.getThreats().values().size(), 1);
assertEquals(result.getThreats().keySet().iterator().next(), LibraryPolicyType.License);
threats = result.getThreats().get(LibraryPolicyType.License);
assertEquals(threats.size(), 1);
threat = threats.iterator().next();
assertEquals(threat.getCount(), 2);
assertEquals(threat.getLevel(), LibraryPolicyThreatLevel.Critical);
assertTrue(threat.getComponents().contains( "component1##Open"));
assertTrue(threat.getComponents().contains( "component2##Open"));
assertEquals(threat.getDispositionCounts().size(), 1);
assertEquals(threat.getDispositionCounts().get(LibraryPolicyThreatDisposition.Open).intValue(), 2);
result.addThreat(LibraryPolicyType.License, LibraryPolicyThreatLevel.Critical, LibraryPolicyThreatDisposition.Closed, "component3");
assertEquals(result.getThreats().size(), 1);
assertEquals(result.getThreats().keySet().size(), 1);
assertEquals(result.getThreats().values().size(), 1);
assertEquals(result.getThreats().keySet().iterator().next(), LibraryPolicyType.License);
=====================================================
== File: src/test/java/com/capitalone/dashboard/model/StandardWidgetTest.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.junit.Test;
import java.util.Objects;
import static org.junit.Assert.*;
public class StandardWidgetTest {
@Test
public void getOptions() {
}
@Test
public void testStandardwidget() {
StandardWidget sw = new StandardWidget(CollectorType.Build, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("build"));
assertTrue(Objects.equals(sw.getOptions().get("id"), "build0"));
assertTrue(sw.getWidget().getName().equalsIgnoreCase("build"));
assertTrue(Objects.equals(sw.getWidget().getOptions().get("id"), "build0"));
sw = new StandardWidget(CollectorType.SCM, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("repo"));
assertTrue(Objects.equals(sw.getOptions().get("id"), "repo0"));
assertTrue(sw.getWidget().getName().equalsIgnoreCase("repo"));
assertTrue(Objects.equals(sw.getWidget().getOptions().get("id"), "repo0"));
sw = new StandardWidget(CollectorType.CodeQuality, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getOptions().get("id"), "codeanalysis0"));
assertTrue(sw.getWidget().getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getWidget().getOptions().get("id"), "codeanalysis0"));
sw = new StandardWidget(CollectorType.Test, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getOptions().get("id"), "codeanalysis0"));
assertTrue(sw.getWidget().getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getWidget().getOptions().get("id"), "codeanalysis0"));
sw = new StandardWidget(CollectorType.StaticSecurityScan, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getOptions().get("id"), "codeanalysis0"));
assertTrue(sw.getWidget().getName().equalsIgnoreCase("codeanalysis"));
assertTrue(Objects.equals(sw.getWidget().getOptions().get("id"), "codeanalysis0"));
sw = new StandardWidget(CollectorType.LibraryPolicy, ObjectId.get());
assertTrue(sw.getName().equalsIgnoreCase("codeanalysis"));
=====================================================
== File: src/test/java/com/capitalone/dashboard/model/ComponentTest.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ComponentTest {
@Test
public void testGetLastUpdatedCollectorItemForType() {
Component component = new Component();
List<CollectorItem> cItems = new ArrayList<>();
cItems.add(makeCollectorItem(1537476665987L));
cItems.add(makeCollectorItem(0));
cItems.add(makeCollectorItem(1537471111111L));
cItems.add(makeCollectorItem(1537472222222L));
cItems.add(makeCollectorItem(1537473333333L));
component.getCollectorItems().put(CollectorType.SCM, cItems);
CollectorItem c = component.getLastUpdatedCollectorItemForType(CollectorType.SCM);
Assert.assertArrayEquals(new long[]{1537476665987L}, new long[]{c.getLastUpdated()});
}
@Test
public void testGetLastUpdatedCollectorItemForTypeForOneItem() {
Component component = new Component();
List<CollectorItem> cItems = new ArrayList<>();
cItems.add(makeCollectorItem(1537473333333L));
component.getCollectorItems().put(CollectorType.SCM, cItems);
CollectorItem c = component.getLastUpdatedCollectorItemForType(CollectorType.SCM);
Assert.assertArrayEquals(new long[]{1537473333333L}, new long[]{c.getLastUpdated()});
}
@Test
public void testGetLastUpdatedCollectorItemForTypeForZero() {
Component component = new Component();
List<CollectorItem> cItems = new ArrayList<>();
cItems.add(makeCollectorItem(1537473333333L));
cItems.add(makeCollectorItem(0));
component.getCollectorItems().put(CollectorType.SCM, cItems);
CollectorItem c = component.getLastUpdatedCollectorItemForType(CollectorType.SCM);
Assert.assertArrayEquals(new long[]{1537473333333L}, new long[]{c.getLastUpdated()});
}
=====================================================
== File: src/test/java/com/capitalone/dashboard/event/EnvironmentComponentEventListenerTest.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.Application;
import com.capitalone.dashboard.model.AuthType;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.BinaryArtifact;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.DashboardType;
import com.capitalone.dashboard.model.EnvironmentComponent;
import com.capitalone.dashboard.model.EnvironmentStage;
import com.capitalone.dashboard.model.Owner;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.ScoreDisplayType;
import com.capitalone.dashboard.repository.BinaryArtifactRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.CommitRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.capitalone.dashboard.util.TestUtils.createBuild;
import static com.capitalone.dashboard.util.TestUtils.createCommit;
import static com.capitalone.dashboard.util.TestUtils.createPipelineCommit;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class EnvironmentComponentEventListenerTest {
=====================================================
== File: src/test/java/com/capitalone/dashboard/event/TestResultEventListenerTest.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.TestResult;
import com.capitalone.dashboard.model.TestCapability;
import com.capitalone.dashboard.model.TestSuiteType;
import com.capitalone.dashboard.model.TestCase;
import com.capitalone.dashboard.model.TestCaseStatus;
import com.capitalone.dashboard.model.TestCaseStep;
import com.capitalone.dashboard.model.TestSuite;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Performance;
import com.capitalone.dashboard.model.PerformanceType;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.PerformanceRepository;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class TestResultEventListenerTest {
@Mock
private CollectorRepository collectorRepository;
@Mock
private CollectorItemRepository collectorItemRepository;
@Mock
private PerformanceRepository performanceRepository;
@InjectMocks
private TestResultEventListener testResultEventListener;
private static final String COLLECTOR_NAME = "PerfTools";
=====================================================
== File: src/test/java/com/capitalone/dashboard/event/CommitEventListenerTest.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.Application;
import com.capitalone.dashboard.model.AuthType;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.CommitType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.DashboardType;
import com.capitalone.dashboard.model.Owner;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.ScoreDisplayType;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class CommitEventListenerTest {
@Mock
private ComponentRepository componentRepository;
@Mock
private DashboardRepository dashboardRepository;
=====================================================
== File: src/test/java/com/capitalone/dashboard/event/BuildEventListenerTest.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.event.sync.SyncDashboard;
import com.capitalone.dashboard.model.Application;
import com.capitalone.dashboard.model.AuthType;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.DashboardType;
import com.capitalone.dashboard.model.EnvironmentStage;
import com.capitalone.dashboard.model.Owner;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.ScoreDisplayType;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.CommitRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.capitalone.dashboard.util.TestUtils.createBuild;
import static com.capitalone.dashboard.util.TestUtils.createCommit;
import static com.capitalone.dashboard.util.TestUtils.createPipelineCommit;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class BuildEventListenerTest {
=====================================================
== File: src/test/java/com/capitalone/dashboard/event/sync/SyncDashboardTest.java
=====================================================
package com.capitalone.dashboard.event.sync;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.Widget;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.repository.BuildRepository;
import com.capitalone.dashboard.repository.CodeQualityRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.LibraryPolicyResultsRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import com.capitalone.dashboard.repository.TestResultRepository;
import com.capitalone.dashboard.testutil.FongoConfig;
import com.capitalone.dashboard.util.LoadTestData;
import com.github.fakemongo.junit.FongoRule;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.collections4.CollectionUtils;
import org.bson.types.ObjectId;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {FongoConfig.class})
@DirtiesContext
public class SyncDashboardTest {
=====================================================
== File: src/test/java/com/capitalone/dashboard/MarkdownTest.java
=====================================================
package com.capitalone.dashboard;
import com.google.common.base.Predicate;
import com.google.common.io.Files;
import org.junit.Before;
import org.junit.Test;
import org.junit.Ignore;
import javax.annotation.Nullable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.regex.Pattern;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class MarkdownTest {
private Pattern absoluteLinkPattern = Pattern.compile(".*github.com/capitalone/Hygieia.*", Pattern.DOTALL);
private File root;
@Before
public void before(){
root = getProjectRoot();
}
@Test
public void licenseInRoot(){
File license = new File(root, "LICENSE");
assertTrue(license.exists());
license = null;
}
private static final Predicate<File> MARK_DOWN_PREDICATE = new Predicate<File>() {
@Override
public boolean apply(@Nullable File file) {
return file != null && file.getName().endsWith(".md");
}
};
//TODO: Review: disabled so we can explain how to setup a test example pointing to the Hygieia github, not sure this is really necessary.
@Ignore
@Test
public void noAbsoluteLinksInMarkdown() throws Exception {
=====================================================
== File: src/main/resources/logback.xml
=====================================================
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
<logger name="com.mongodb.FongoDBCollection" level="INFO"/>
<logger name="com.github.fakemongo.impl.ExpressionParser" level="INFO"/>
</configuration>
=====================================================
== File: src/main/java/com/capitalone/dashboard/misc/HygieiaException.java
=====================================================
package com.capitalone.dashboard.misc;
public class HygieiaException extends Exception {
private static final long serialVersionUID = 4596406816345733781L;
public static final int NOTHING_TO_UPDATE = 0;
public static final int JSON_FORMAT_ERROR = -1;
public static final int COLLECTOR_CREATE_ERROR = -10;
public static final int COLLECTOR_ITEM_CREATE_ERROR = -11;
public static final int ERROR_INSERTING_DATA = -12;
public static final int DUPLICATE_DATA = -13;
public static final int BAD_DATA = -14;
public static final int API_RATE_LIMIT_ERROR = -15;
public static final int INVALID_CONFIGURATION = -999;
private int errorCode = 0;
public HygieiaException(String message, int errorCode) {
super(message);
this.errorCode = errorCode;
}
public HygieiaException(String message, Throwable cause, int errorCode) {
super(message, cause);
this.errorCode = errorCode;
}
public HygieiaException(Throwable cause) {
super(cause);
}
public HygieiaException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public int getErrorCode() {
return errorCode;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/AuditResultRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.AuditResult;
import com.capitalone.dashboard.model.AuditType;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface AuditResultRepository extends PagingAndSortingRepository<AuditResult, ObjectId> {
AuditResult findById(ObjectId id);
Page<AuditResult> findByAuditType(AuditType auditType, Pageable pageable);
Iterable<AuditResult> findByDashboardTitle(String dashboardTitle);
Iterable<AuditResult> findByDashboardTitleAndAuditType(String dashboardTitle, AuditType auditType);
Iterable<AuditResult> findByConfigItemBusServNameAndConfigItemBusAppName(String configItemBusServName, String configItemBusAppName);
Iterable<AuditResult> findByConfigItemBusServNameAndConfigItemBusAppNameAndAuditType(String configItemBusServName, String configItemBusAppName, AuditType auditType);
Page<AuditResult> findByLineOfBusiness(String lineOfBusiness, Pageable pageable);
Page<AuditResult> findByLineOfBusinessAndAuditType(String lineOfBusiness, AuditType auditType, Pageable pageable);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CollectorItemRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CollectorItem;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.types.path.PathBuilder;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* A {@link CollectorItem} repository
*/
public interface CollectorItemRepository extends BaseCollectorItemRepository<CollectorItem>, QueryDslPredicateExecutor<CollectorItem> {
//// FIXME: 1/20/16 I really hate this dashboard specific method in the collectoritem repository, should we move the dashboardcollectoritem repository into core?
@Query(value="{'options.dashboardId': ?1, 'collectorId': ?0 }")
CollectorItem findTeamDashboardCollectorItemsByCollectorIdAndDashboardId(ObjectId collectorId, String dashboardId);
@Query(value="{'options.applicationName' : ?1, 'collectorId' : ?0}")
List<CollectorItem> findByOptionsAndDeployedApplicationName(ObjectId collectorId, String applicationName);
// FIXME: 3/1/16 Really need to refactor this. Do not want collector specific lookups here.
@Query(value="{'options.jobName' : ?2, 'niceName' : ?1, 'collectorId' : ?0}")
CollectorItem findByCollectorIdNiceNameAndJobName(ObjectId collectorId, String niceName, String jobName);
@Query(value="{'options.projectId' : ?2, 'niceName' : ?1, 'collectorId' : ?0}")
CollectorItem findByCollectorIdNiceNameAndProjectId(ObjectId collectorId, String niceName, String projectId);
@Query(value="{ 'collectorId' : ?0, options.url : {$regex : '^?1$', $options: 'i'}, options.branch : {$regex : '^?2$', $options: 'i'}, enabled : ?3}")
CollectorItem findRepoByUrlAndBranch(ObjectId collectorId, String url, String branch, boolean enabled);
@Query(value="{ 'collectorId': { $in: ?0 }, ?1 : {$regex : '.*?2.*', $options: 'i'}}")
Page<CollectorItem> findByCollectorIdAndSearchField(List<ObjectId> collectorId, String searchField, String searchFieldValue, Pageable pageable);
@Query(value="{ 'collectorId': { $in: ?0 }, ?1 : {$regex : '.*?2.*', $options: 'i'} , ?3 : {$regex : '.*?4.*', $options: 'i'}}")
Page<CollectorItem> findByCollectorIdAndSearchFields(List<ObjectId> collectorId,String searchField1, String searchFieldValue1, String searchField2,String searchFieldValue2, Pageable pageable);
@Query(value="{'options.teamId' : ?0}")
CollectorItem findByJiraTeamId(String teamId);
@Query(value="{'options.projectId' : ?0}")
CollectorItem findByJiraProjectId(String projectId);
List<CollectorItem> findByDescription(String description);
default Iterable<CollectorItem> findAllByOptionNameValue(String optionName, String optionValue) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ChangeOrderRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.ChangeOrder;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
/**
* Repository for {@link ChangeOrder} data.
*/
public interface ChangeOrderRepository extends CrudRepository<ChangeOrder, ObjectId> {
ChangeOrder findByChangeID(String changeItem);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/RequestLogRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.RequestLog;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
public interface RequestLogRepository extends CrudRepository<RequestLog, ObjectId> {
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryCustom.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.Map;
import com.capitalone.dashboard.model.BinaryArtifact;
public interface BinaryArtifactRepositoryCustom {
String CANONICAL_NAME = "canonicalName";
String ARTIFACT_GROUP_ID = "artifactGroupId";
String ARTIFACT_MODULE = "artifactModule";
String ARTIFACT_VERSION = "artifactVersion";
String ARTIFACT_NAME = "artifactName";
String ARTIFACT_CLASSIFIER = "artifactClassifier";
String ARTIFACT_EXTENSION = "artifactExtension";
String BUILD_INFO_ID = "buildInfo.id";
Iterable<BinaryArtifact> findByAttributes(Map<String, Object> attributes);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/EnvironmentComponentRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.EnvironmentComponent;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* {@link EnvironmentComponent} repository.
*/
public interface EnvironmentComponentRepository extends CrudRepository<EnvironmentComponent, ObjectId> {
/**
* Finds the {@link EnvironmentComponent} collector item id, environment name and component name.
*
* @param collectorItemId collector item id
* @param environmentName environment name
* @param componentName component name
* @return a {@link EnvironmentComponent}
*/
@Query(value="{ collectorItemId : ?0, environmentName : ?1, componentName : ?2}")
EnvironmentComponent findComponent(ObjectId collectorItemId, String environmentName, String componentName);
/**
* Finds all {@link EnvironmentComponent}s for a given {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @return list of {@link EnvironmentComponent}
*/
List<EnvironmentComponent> findByCollectorItemId(ObjectId collectorItemId);
@Query(value="{ 'collectorItemId': {$in: ?0 }, 'deployed': true}")
List<EnvironmentComponent> findDeployedByCollectorItemIds(List<ObjectId> collectorItemIds);
@Query(value="{ 'collectorItemId': ?0, 'componentName': ?1, 'componentVersion': ?2, 'deployed':true}")
List<EnvironmentComponent> findDeployedByCollectorItemIdAndComponentNameAndComponentVersion(ObjectId dashboardCollectorItemId, String componentName, String componentVersion);
@Query(value="{ 'collectorItemId': ?0, 'componentName': ?1, 'componentVersion': ?2, 'deployTime':?3}")
EnvironmentComponent findByUniqueKey(ObjectId collectorItemId, String componentName, String componentVersion, long deployTime);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/GitHubRepoRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.webhook.github.GitHubRepo;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import java.util.List;
public interface GitHubRepoRepository extends BaseCollectorItemRepository<GitHubRepo>, QueryDslPredicateExecutor<GitHubRepo> {
@Query(value="{ 'collectorId' : ?0, options.url : ?1, options.branch : ?2}")
GitHubRepo findGitHubRepo(ObjectId collectorId, String url, String branch);
@Query(value="{ 'collectorId' : ?0, enabled: true}")
List<GitHubRepo> findEnabledGitHubRepos(ObjectId collectorId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/AuthenticationRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import org.bson.types.ObjectId;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.capitalone.dashboard.model.Authentication;
public interface AuthenticationRepository extends PagingAndSortingRepository<Authentication, ObjectId>{
Authentication findByUsername(String username);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/GenericCollectorItemRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.GenericCollectorItem;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Build} data.
*/
public interface GenericCollectorItemRepository extends CrudRepository<GenericCollectorItem, ObjectId>, QueryDslPredicateExecutor<GenericCollectorItem> {
List<GenericCollectorItem> findAllByToolName(String toolName);
List<GenericCollectorItem> findAllByRelatedCollectorItem (ObjectId relatedCollectorItemId);
GenericCollectorItem findByToolNameAndRawDataAndRelatedCollectorItem(String toolName, String rawData, ObjectId relatedCollectorItem);
List<GenericCollectorItem> findAllByToolNameAndProcessTimeEquals(String toolName, long processTime);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/RallyBurnDownRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.RallyBurnDownData;
public interface RallyBurnDownRepository extends CrudRepository<RallyBurnDownData, ObjectId>{
RallyBurnDownData findByIterationIdAndProjectId(String iterationId, String projectId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CloudVolumeRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CloudVolumeStorage;
import com.capitalone.dashboard.model.NameValue;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.Collection;
import java.util.List;
public interface CloudVolumeRepository extends
CrudRepository<CloudVolumeStorage, ObjectId>,
QueryDslPredicateExecutor<CloudVolumeStorage> {
@Query(value = "{ collectorItemId: ?0 }")
Collection<CloudVolumeStorage> findByCollectorItemId(ObjectId collectorItemId);
@Query(value = "{volumeId : ?0}")
CloudVolumeStorage findByVolumeId(String volumeId);
@Query(value = "{ tags: ?0 }")
Collection<CloudVolumeStorage> findByTags(List<NameValue> tags);
@Query(value = "{ 'tags.name' : ?0, 'tags.value' : ?1 }")
Collection<CloudVolumeStorage> findByTagNameAndValue(String name, String value);
Collection<CloudVolumeStorage> findByVolumeIdIn(List<String> volumeId);
Collection<CloudVolumeStorage> findByAttachInstancesIn(List<String> attachInstances);
@Query(value = "{accountNumber : ?0}")
Collection<CloudVolumeStorage> findByAccountNumber(String accountNumber);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/BuildRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.BuildStatus;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Build} data.
*/
public interface BuildRepository extends CrudRepository<Build, ObjectId>, QueryDslPredicateExecutor<Build> {
/**
* Finds the {@link Build} with the given number for a specific {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @param number buld number
* @return a {@link Build}
*/
Build findByCollectorItemIdAndNumber(ObjectId collectorItemId, String number);
@Query(value="{'sourceChangeSet.scmRevisionNumber' : {$exists: true, $in: ?0}, 'collectorItemId': { $in: ?1 }}")
List<Build> findBuildsForRevisionNumbersAndBuildCollectorItemIds(List<String> scmRevisionNumbers, List<ObjectId> buildCollectorItemId);
Build findTop1ByCollectorItemIdOrderByTimestampDesc(ObjectId collectorItemId);
Build findTop1ByCollectorItemIdAndBuildStatusOrderByTimestampDesc(ObjectId collectorItemId, BuildStatus buildStatus);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ApiTokenRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.ApiToken;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface ApiTokenRepository extends CrudRepository<ApiToken, ObjectId> {
ApiToken findByApiUserAndExpirationDt(String apiUser, Long expirationDt);
ApiToken findByApiUserAndApiKey(String apiUser, String apiKey);
List<ApiToken> findByApiUser(String apiUser);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQuery.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import org.bson.types.ObjectId;
import java.util.List;
import java.util.Map;
public interface CustomRepositoryQuery {
List<CollectorItem> findCollectorItemsBySubsetOptions(ObjectId id, Map<String, Object> allOptions, Map<String, Object> uniqueOptions,Map<String,Object> uniqueOptionsFromCollector);
List<Component> findComponents(Collector collector);
List<Component> findComponents(CollectorType collectorType);
List<Component> findComponents(Collector collector, CollectorItem collectorItem);
List<Component> findComponents(ObjectId collectorId, CollectorType collectorType, CollectorItem collectorItem);
List<Component> findComponents(ObjectId collectorId, CollectorType collectorType, ObjectId collectorItemId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CloudInstanceHistoryRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CloudInstanceHistory;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import java.util.Collection;
public interface CloudInstanceHistoryRepository extends
CrudRepository<CloudInstanceHistory, ObjectId> {
Collection<CloudInstanceHistory> findByAccountNumber(String accountNumber);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/FortifyScanRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.FortifyScanReport;
public interface FortifyScanRepository extends CrudRepository<FortifyScanReport, ObjectId>{
FortifyScanReport findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
List<FortifyScanReport> findByCollectorItemId(ObjectId id);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/IncidentRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Incident;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import java.util.List;
/**
* Repository for {@link Incident} data.
*/
public interface IncidentRepository extends MongoRepository<Incident, ObjectId> {
Incident findByIncidentID(String incidentID);
@Query("{ 'severity' : {$in : ?0} }")
List<Incident> findBySeverity(String[] severityValues);
@Query(value = "{'severity' : {$in : ?0}, 'openTime' : {$gt : ?1, $lt : ?2}}")
Page<Incident> findIncidentsBySeverityAndOpenTimeBetween (String[] severityValues, long startDate, long endDate, Pageable pageable);
@Query(value = "{'severity' : {$in : ?0}, 'openTime' : {$gt : ?1, $lt : ?2}}", count = true)
long countIncidentsBySeverityAndOpenTimeBetween (String[] severityValues, long startDate, long endDate);
@Query("{ 'collectorItemId' : {$in : ?0} }")
List<Incident> findByCollectorItemId(List<ObjectId> collectorItemIds);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/JobRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import com.capitalone.dashboard.model.JobCollectorItem;
public interface JobRepository<T extends JobCollectorItem> extends BaseCollectorItemRepository<T> {
@Query(value="{ 'collectorId' : ?0, options.instanceUrl : ?1, options.jobName : ?2}")
T findJob(ObjectId collectorId, String instanceUrl, String jobName);
@Query(value="{ 'collectorId' : ?0, options.jobUrl : ?1, options.jobName : ?2}")
T findJobByJobUrl(ObjectId collectorId, String jobUrl, String jobName);
@Query(value="{ 'collectorId' : ?0, options.instanceUrl : ?1, enabled: true}")
List<T> findEnabledJobs(ObjectId collectorId, String instanceUrl);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.BinaryArtifact;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface BinaryArtifactRepository extends CrudRepository<BinaryArtifact, ObjectId>, BinaryArtifactRepositoryCustom {
Iterable<BinaryArtifact> findByCollectorItemId(ObjectId collectorItemId);
@Query("{ 'collectorItemId': ?0, 'artifactGroupId' : ?1, 'artifactModule' : ?2, 'artifactVersion' : ?3, 'artifactName' : ?4, 'artifactClassifier' : ?5, 'artifactExtension' : ?6 }")
Iterable<BinaryArtifact> findByAttributes(Object collectorItemId, String artifactGroupId, String artifactModule, String artifactVersion, String artifactName, String artifactClassifier, String artifactExtension);
@Query("{ 'artifactGroupId' : ?0, 'artifactModule' : ?1, 'artifactVersion' : ?2, 'artifactName' : ?3, 'artifactClassifier' : ?4, 'artifactExtension' : ?5 }")
Iterable<BinaryArtifact> findByAttributes(String artifactGroupId, String artifactModule, String artifactVersion, String artifactName, String artifactClassifier, String artifactExtension);
Iterable<BinaryArtifact> findByBuildInfoId (ObjectId artifactBuildId);
Iterable<BinaryArtifact> findByArtifactNameAndTimestampGreaterThan(String artifactName, Long timestamp);
Iterable<BinaryArtifact> findByArtifactNameAndArtifactExtensionAndTimestampGreaterThan(String artifactName, String artifactExtension, Long timestamp);
@Query(value="{'metadata.buildUrl' : ?0}")
Iterable<BinaryArtifact> findByMetadataBuildUrl(String buildUrl);
List<BinaryArtifact> findByCollectorItemIdAndTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/LibraryPolicyResultsRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.model.LibraryPolicyResult;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link CodeQuality} data.
*/
public interface LibraryPolicyResultsRepository extends CrudRepository<LibraryPolicyResult, ObjectId>, QueryDslPredicateExecutor<LibraryPolicyResult> {
LibraryPolicyResult findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
LibraryPolicyResult findByCollectorItemId(ObjectId collectorItemId);
List<LibraryPolicyResult> findByCollectorItemIdAndTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
List<LibraryPolicyResult> findByCollectorItemIdAndEvaluationTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/BinaryArtifactRepositoryImpl.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import com.capitalone.dashboard.model.BinaryArtifact;
public class BinaryArtifactRepositoryImpl implements BinaryArtifactRepositoryCustom {
@Autowired
MongoTemplate template;
@Override
public Iterable<BinaryArtifact> findByAttributes(Map<String, Object> attributes) {
Criteria c = null;
boolean first = true;
for (Map.Entry<String, Object> e : attributes.entrySet()) {
if (first) {
c = Criteria.where(e.getKey()).is(e.getValue());
} else {
c = c.and(e.getKey()).is(e.getValue());
}
first = false;
}
return template.find(new Query(c), BinaryArtifact.class);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ServiceAccountRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.ServiceAccount;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
public interface ServiceAccountRepository extends CrudRepository<ServiceAccount, ObjectId> {
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ScopeRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.Scope;
/**
* Repository for {@link Scope}.
*/
public interface ScopeRepository extends CrudRepository<Scope, ObjectId>,
QueryDslPredicateExecutor<Scope> {
/**
* This essentially returns the max change date from the collection, based
* on the last change date (or default delta change date property) available
*
* @param collectorId
* Collector ID of source system collector
* @param changeDate
* Last available change date or delta begin date property
* @return A single Change Date value that is the maximum value of the
* existing collection
*/
@Query
List<Scope> findTopByCollectorIdAndChangeDateGreaterThanOrderByChangeDateDesc(
ObjectId collectorId, String changeDate);
@Query(value = "{'pId' : ?0}", fields="{'pId' : 1}")
List<Scope> getScopeIdById(String pId);
@Query
List<Scope> findByOrderByProjectPathDesc();
@Query(value = "{'pId' : ?0 }")
List<Scope> getScopeById(String pId);
@Query(value = "{ 'collectorId' : ?0 }")
List<Scope> findByCollectorId(ObjectId collectorId);
Page<Scope> findAllByCollectorIdAndNameContainingIgnoreCase(ObjectId collectorId, String name, Pageable pageable);
Scope findByCollectorIdAndPId(ObjectId collectorId, String pId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ScoreCriteriaSettingsRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.score.ScoreMetric;
import com.capitalone.dashboard.model.score.ScoreValueType;
import com.capitalone.dashboard.model.score.settings.ScoreCriteriaSettings;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
/**
* Repository for {@link ScoreCriteriaSettings} data.
*/
public interface ScoreCriteriaSettingsRepository extends CrudRepository<ScoreCriteriaSettings, ObjectId>, QueryDslPredicateExecutor<ScoreMetric> {
/**
* Finds {@link ScoreCriteriaSettings}s for a given type {@link com.capitalone.dashboard.model.score.ScoreValueType}.
*
* @param type Score Value Type
* @return a {@link ScoreCriteriaSettings}
*/
ScoreCriteriaSettings findByType(ScoreValueType type);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CloudSubNetworkRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CloudInstance;
import com.capitalone.dashboard.model.CloudSubNetwork;
import com.capitalone.dashboard.model.NameValue;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.Collection;
import java.util.List;
public interface CloudSubNetworkRepository extends
CrudRepository<CloudSubNetwork, ObjectId>,
QueryDslPredicateExecutor<CloudInstance> {
@Query(value = "{ collectorItemId: ?0 }")
CloudSubNetwork findByCollectorItemId(ObjectId collectorItemId);
@Query(value= "{ tags: ?0 }")
Collection<CloudSubNetwork> findByTags(List<NameValue> tags);
@Query(value = "{subnetId : ?0}")
CloudSubNetwork findBySubnetId(String subnetId);
@Query(value = "{ 'tags.name' : ?0, 'tags.value' : ?1 }")
Collection<CloudSubNetwork> findByTagNameAndValue(String name, String value);
Collection<CloudSubNetwork> findBySubnetIdIn(List<String> subnetId);
Collection<CloudSubNetwork> findByAccountNumber(String accountNumber);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CollItemConfigHistoryRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CollectorItemConfigHistory;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface CollItemConfigHistoryRepository extends CrudRepository<CollectorItemConfigHistory, ObjectId> {
List<CollectorItemConfigHistory> findByCollectorItemIdAndTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
CollectorItemConfigHistory findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/BaseCollectorItemRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.capitalone.dashboard.model.CollectorItem;
/**
* Base {@link CollectorItem} repository that provides methods useful for any {@link CollectorItem}
* implementation.
*
* @param <T> Class that extends {@link CollectorItem}
*/
public interface BaseCollectorItemRepository<T extends CollectorItem> extends PagingAndSortingRepository<T, ObjectId> {
/**
* Finds all {@link CollectorItem}s that are enabled.
*
* @return list of {@link CollectorItem}s
*/
List<T> findByEnabledIsTrue();
/**
* Finds all {@link CollectorItem}s that match the provided id's.
*
* @param ids {@link Collection} of ids
* @return list of {@link CollectorItem}s
*/
List<T> findByCollectorIdIn(Collection<ObjectId> ids);
/**
* Finds paged results of {@link CollectorItem}s that match the provided id's.
*
* @param ids {@link Collection} of ids
* @param {@link org.springframework.data.domain.Pageable} object to determine which page to return
* @return page of {@link CollectorItem}s
*/
Page<T> findByCollectorIdInAndDescriptionContainingIgnoreCase(Collection<ObjectId> ids, String description, Pageable pageable);
/**
* Finds the {@link CollectorItem} for a given collector and options. This should represent a unique
* instance of a {@link CollectorItem} for a given {@link com.capitalone.dashboard.model.Collector}.
*
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/TeamRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Team;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Team}.
*/
public interface TeamRepository extends CrudRepository<Team, ObjectId>,
QueryDslPredicateExecutor<Team> {
Team findByTeamId(String teamId);
Team findByName(String name);
/**
* This essentially returns the max change date from the collection, based
* on the last change date (or default delta change date property) available
*
* @param collectorId
* Collector ID of source system collector
* @param changeDate
* Last available change date or delta begin date property
* @return A single Change Date value that is the maximum value of the
* existing collection
*/
@Query(value = "{ 'collectorId' : ?0, 'changeDate' : {$gt: ?1}, '_class' : 'com.capitalone.dashboard.model.Team', 'assetState': 'Active'}")
List<Team> findTopByChangeDateDesc(ObjectId collectorId, String changeDate);
@Query(value = "{ 'collectorId' : ?0 }")
List<Team> findByCollectorId(ObjectId collectorId);
Page<Team> findAllByCollectorIdAndNameContainingIgnoreCase(ObjectId collectorId, String name, Pageable pageable);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CodeQualityRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CodeQuality;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link CodeQuality} data.
*/
public interface CodeQualityRepository extends CrudRepository<CodeQuality, ObjectId>, QueryDslPredicateExecutor<CodeQuality> {
/**
* Finds the {@link CodeQuality} data point at the given timestamp for a specific
* {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @param timestamp timestamp
* @return a {@link CodeQuality}
*/
CodeQuality findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
List<CodeQuality> findByCollectorItemIdAndVersionOrderByTimestampDesc (ObjectId collectorItemId,String version);
List<CodeQuality> findByCollectorItemIdAndNameAndVersionOrderByTimestampDesc (ObjectId collectorItemId,String name,String version);
List<CodeQuality> findByCollectorItemIdOrderByTimestampDesc (ObjectId collectorItemId);
List<CodeQuality> findByNameAndVersion(String name,String version);
List<CodeQuality> findByNameAndVersionOrderByTimestampDesc(String name,String version);
List<CodeQuality> findByCollectorItemIdAndTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
CodeQuality findTop1ByCollectorItemIdOrderByTimestampDesc(ObjectId collectorItemId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryImpl.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import javax.xml.bind.DatatypeConverter;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.util.StringUtils;
import com.capitalone.dashboard.model.Feature;
import com.capitalone.dashboard.util.FeatureCollectorConstants;
/**
* Repository for {@link Feature} with custom methods implementation.
*/
public class FeatureRepositoryImpl implements FeatureRepositoryCustom {
@Autowired
private MongoOperations operations;
@Override
@SuppressWarnings("PMD.NPathComplexity")
public List<Feature> findByActiveEndingSprints(String sTeamId, String sProjectId, ObjectId collectorId, String currentISODateTime, boolean minimal) {
boolean dateTimeValid = true;
try {
DatatypeConverter.parseDateTime(currentISODateTime);
} catch (IllegalArgumentException e) {
// invalid datetime string
dateTimeValid = false;
}
String queryStr = dateTimeValid
? "{'isDeleted' : 'False', $and : [{'sSprintID' : {$ne : null}}, {'sSprintID' : {$ne : ''}}, {'sSprintAssetState': { $regex: '^active$', $options: 'i' }}, {'sSprintEndDate' : {$gte : '" + currentISODateTime + "'}}, {'sSprintEndDate' : {$lt : '9999-12-31T59:59:59.999999'}}] }, $orderby: { 'sStatus' :-1 }"
: "{'isDeleted' : 'False', $and : [{'sSprintID' : {$ne : null}}, {'sSprintID' : {$ne : ''}}, {'sSprintAssetState': { $regex: '^active$', $options: 'i' }}, {'sSprintEndDate' : {$lt : '9999-12-31T59:59:59.999999'}}] }, $orderby: { 'sStatus' :-1 }";
BasicQuery query = null;
if (minimal) {
query = new BasicQuery(queryStr,
"{'sStatus': 1, 'sNumber': 1, 'sName': 1, 'changeDate': 1, 'sUrl': 1, 'sSprintID': 1, 'sSprintName': 1, 'sSprintUrl': 1, 'sSprintBeginDate': 1, 'sSprintEndDate': 1, 'sEpicID' : 1,'sEpicNumber' : 1, 'sEpicName' : 1, 'sEpicUrl' : 1, 'sEstimate': 1, 'sEstimateTime': 1}");
} else {
query = new BasicQuery(queryStr);
}
if (collectorId != null) {
query.addCriteria(Criteria.where("collectorId").is(collectorId));
}
if (!StringUtils.isEmpty(sTeamId) && !FeatureCollectorConstants.TEAM_ID_ANY.equalsIgnoreCase(sTeamId)) {
query.addCriteria(Criteria.where("sTeamID").is(sTeamId));
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/FeatureRepositoryCustom.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import com.capitalone.dashboard.model.Feature;
/**
* Repository for {@link FeatureCollector} with custom methods.
*/
public interface FeatureRepositoryCustom {
/**
* Find all features with active sprints that are between the provided date and that have an end date < 9999-12-31 EOD
*
* @param sTeamId
* @param sProjectId
* @param currentISODateTime
* @param minimal
* @return
*/
List<Feature> findByActiveEndingSprints(String sTeamId, String sProjectId, ObjectId collectorId, String currentISODateTime, boolean minimal);
/**
* Find all features that have sprints set but without an end date (or an end date >= 9999-12-31 EOD)
*
* @param sTeamId
* @param sProjectId
* @param minimal
* @return
*/
List<Feature> findByUnendingSprints(String sTeamId, String sProjectId, ObjectId collectorId, boolean minimal);
/**
* Find all features without sprints set
*
* @param sTeamId
* @param sProjectId
* @param minimal
* @return
*/
List<Feature> findByNullSprints(String sTeamId, String sProjectId, ObjectId collectorId, boolean minimal);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/DashboardRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.DashboardType;
import com.capitalone.dashboard.model.Owner;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.Collection;
import java.util.List;
/**
* {@link Dashboard} repository.
*/
public interface DashboardRepository extends PagingAndSortingRepository<Dashboard, ObjectId> {
List<Dashboard> findByOwner(String owner);
List<Dashboard> findByOwners(Owner owner);
List<Dashboard> findByOwnersAndTypeContainingIgnoreCase(Owner owner, String type);
List<Dashboard> findByTitle(String title);
Dashboard findByTitleAndType(String title, DashboardType type);
List<Dashboard> findByApplicationComponentsIn(Collection<Component> components);
@Query(value="{'application.components.$id': {$in : ?0 }}")
List<Dashboard> findByApplicationComponentIdsIn(Collection<ObjectId> componentIds);
@Query(value="{'type': {$in : [null, 'Team']}}")
List<Dashboard> findTeamDashboards();
@Query(value="{'widgets.options.teams.collectorItemId': ?0 }")
List<Dashboard> findProductDashboardsByTeamDashboardCollectorItemId(String teamDashboardCollectorItemId);
Iterable<Dashboard> findAllByConfigurationItemBusServName(String configurationItem);
Iterable<Dashboard> findAllByConfigurationItemBusAppName(String configurationItem);
Iterable<Dashboard> findAllByConfigurationItemBusServNameIn(List<String> configurationItemList);
Iterable<Dashboard> findAllByConfigurationItemBusServNameAndConfigurationItemBusAppName(String appName, String compName);
Dashboard findByConfigurationItemBusServNameIgnoreCaseAndConfigurationItemBusAppNameIgnoreCase(String appName, String compName);
List<Dashboard> findAllByTypeAndConfigurationItemBusServNameContainingIgnoreCase(DashboardType type, String appName);
List<Dashboard> findAllByConfigurationItemBusServNameContainingIgnoreCaseAndConfigurationItemBusAppNameContainingIgnoreCase(String appName, String compName);
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/TemplateRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Template;
import org.bson.types.ObjectId;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
* {@link Template} repository.
*/
public interface TemplateRepository extends PagingAndSortingRepository<Template, ObjectId> {
Template findByTemplate(String template);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ScoreRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.score.ScoreMetric;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.CodeQuality;
/**
* Repository for {@link CodeQuality} data.
*/
public interface ScoreRepository extends CrudRepository<ScoreMetric, ObjectId>, QueryDslPredicateExecutor<ScoreMetric> {
/**
* Finds the {@link ScoreMetric} data point at the given timestamp for a specific
* {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @param timestamp timstamp
* @return a {@link CodeQuality}
*/
ScoreMetric findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
/**
* Finds all {@link ScoreMetric}s for a given {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @return list of {@link ScoreMetric}
*/
ScoreMetric findByCollectorItemId(ObjectId collectorItemId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CloudInstanceRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CloudInstance;
import com.capitalone.dashboard.model.NameValue;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.Collection;
import java.util.List;
public interface CloudInstanceRepository extends
CrudRepository<CloudInstance, ObjectId>,
QueryDslPredicateExecutor<CloudInstance> {
@Query(value = "{instanceId : ?0}")
CloudInstance findByInstanceId(String instanceId);
@Query(value = "{ tags: ?0 }")
Collection<CloudInstance> findByTags(List<NameValue> tags);
@Query(value = "{ 'tags.name' : ?0, 'tags.value' : ?1 }")
Collection<CloudInstance> findByTagNameAndValue(String name, String value);
Collection<CloudInstance> findByInstanceIdIn(List<String> instanceId);
@Query(value = "{accountNumber : ?0}")
Collection<CloudInstance> findByAccountNumber(String accountNumber);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CmdbRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Cmdb;
import org.bson.types.ObjectId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Cmdb} data.
*/
public interface CmdbRepository extends CrudRepository<Cmdb, ObjectId> {
Cmdb findByConfigurationItem(String configurationItem);
List<Cmdb> findAllByConfigurationItemContainingOrCommonNameContainingAllIgnoreCase(String configItemFilter, String commonNameFilter);
Page<Cmdb> findAllByItemTypeAndValidConfigItemAndIdIn(String itemType, boolean valid, List<ObjectId> idList, Pageable pageable);
Page<Cmdb> findAllByItemTypeAndConfigurationItemContainingIgnoreCaseAndValidConfigItem(String itemType, String configurationItem, Pageable pageable, boolean valid);
Cmdb findByConfigurationItemIgnoreCase(String configurationItem);
List<Cmdb> findAllByItemType(String type);
List<Cmdb> findAllByItemTypeAndValidConfigItem(String type, boolean valid);
Cmdb findByConfigurationItemAndItemType(String confiugrationItem, String itemType);
Iterable<Cmdb> findAllByValidConfigItem(boolean validFlag);
Cmdb findByConfigurationItemIgnoreCaseOrCommonNameIgnoreCase(String configurationItem, String commonName);
Cmdb findByItemTypeAndCommonNameContainingIgnoreCase(String itemType, String commonName);
Cmdb findByItemTypeAndConfigurationItemIgnoreCase(String itemType, String configurationItem);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CloudVirtualNetworkRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CloudInstance;
import com.capitalone.dashboard.model.CloudVirtualNetwork;
import com.capitalone.dashboard.model.NameValue;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.Collection;
import java.util.List;
public interface CloudVirtualNetworkRepository extends
CrudRepository<CloudVirtualNetwork, ObjectId>,
QueryDslPredicateExecutor<CloudInstance> {
@Query(value = "{ collectorItemId: ?0 }")
CloudVirtualNetwork findByCollectorItemId(ObjectId collectorItemId);
@Query(value= "{ tags: ?0 }")
Collection<CloudVirtualNetwork> findByTags(List<NameValue> tags);
@Query(value = "{virtualNetorkId : ?0}")
CloudVirtualNetwork findByVirtualNetworkId(String virtualNetworkId);
@Query(value = "{ 'tags.name' : ?0, 'tags.value' : ?1 }")
Collection<CloudVirtualNetwork> findByTagNameAndValue(String name, String value);
Collection<CloudVirtualNetwork> findByvirtualNetworkIdIn(List<String> virtualNetworkId);
@Query(value = "{accountNumber : ?0}")
Collection<CloudVirtualNetwork> findByAccountNumber(String accountNumber);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ScoreCollectorItemRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import com.capitalone.dashboard.model.score.ScoreCollectorItem;
/**
* Repository for {@link ScoreCollectorItem}s.
*/
public interface ScoreCollectorItemRepository extends BaseCollectorItemRepository<ScoreCollectorItem> {
/**
* Finds all enabled {@link ScoreCollectorItem}s
*
* @param collectorId ID
* @return list of {@link ScoreCollectorItem}s
*/
@Query(value = "{ 'collectorId' : ?0, enabled: true}")
List<ScoreCollectorItem> findEnabledScores(ObjectId collectorId);
@Query(value="{'collectorId': ?0, 'options.dashboardId': ?1}")
ScoreCollectorItem findCollectorItemByCollectorIdAndDashboardId(ObjectId collectorId, ObjectId dashboardId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/UserInfoRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.Collection;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.AuthType;
import com.capitalone.dashboard.model.UserInfo;
import com.capitalone.dashboard.model.UserRole;
public interface UserInfoRepository extends CrudRepository<UserInfo, ObjectId>{
UserInfo findByUsernameAndAuthType(String username, AuthType authType);
Collection<UserInfo> findByAuthoritiesIn(UserRole roleAdmin);
Iterable<UserInfo> findByOrderByUsernameAsc();
UserInfo findByUsername(String userName);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ScopeOwnerRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import com.capitalone.dashboard.model.ScopeOwnerCollectorItem;
/**
* CollectorItem repository for {@link ScopeOwnerCollectorItem}.
*/
public interface ScopeOwnerRepository extends BaseCollectorItemRepository<ScopeOwnerCollectorItem> {
@Query(value = "{ 'collectorId' : ?0, 'options.teamId' : ?1, 'options.assetState': 'Active'}")
ScopeOwnerCollectorItem findTeamCollector(ObjectId collectorId, String teamId);
@Query(value = "{ 'collectorId' : ?0, 'options.teamId' : ?1, options.name : ?2, 'options.assetState': 'Active'}")
ScopeOwnerCollectorItem findTeamCollector(ObjectId collectorId, String teamId, String name);
@Query(value = "{ 'collectorId' : ?0, 'options.teamId' : ?1, enabled: true, 'options.assetState': 'Active'}")
List<ScopeOwnerCollectorItem> findEnabledTeamCollectors(ObjectId collectorId, String teamId);
/**
* This essentially returns the max change date from the collection, based
* on the last change date (or default delta change date property) available
*
* @param collectorId
* Collector ID of source system collector
* @param changeDate
* Last available change date or delta begin date property
* @return A single Change Date value that is the maximum value of the
* existing collection
*/
@Query(value = "{ 'collectorId' : ?0, 'options.changeDate' : {$gt: ?1}, '_class' : 'com.capitalone.dashboard.model.ScopeOwnerCollectorItem', 'options.assetState': 'Active'}")
List<ScopeOwnerCollectorItem> findTopByChangeDateDesc(ObjectId collectorId, String changeDate);
@Query(value = "{'options.teamId' : ?0}", fields = "{'options.teamId' : 1}")
List<ScopeOwnerCollectorItem> getTeamIdById(String teamId);
@Query(value = "{'options.assetState' : ?0}", delete = true)
List<ScopeOwnerCollectorItem> delete(String assetState);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ComponentRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.types.path.PathBuilder;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
import java.util.Map;
/**
* {@link Component} repository.
*/
public interface ComponentRepository extends CrudRepository<Component, ObjectId>,QueryDslPredicateExecutor<Component> {
@Query(value = "{'collectorItems.SCM._id': ?0}")
List<Component> findBySCMCollectorItemId(ObjectId scmCollectorItemId);
@Query(value="{'collectorItems.Build._id': ?0}")
List<Component> findByBuildCollectorItemId(ObjectId buildCollectorItemId);
@Query(value="{'collectorItems.Deployment._id': ?0}")
List<Component> findByDeployCollectorItemId(ObjectId deployCollectorItemId);
@Query(value="{'collectorItems.Incident.enabled' : ?0}")
List<Component> findByIncidentCollectorItems(boolean enabled);
default List<Component> findByCollectorTypeAndItemIdIn(CollectorType collectorType, List<ObjectId> collectorItemIds) {
BooleanBuilder builder = new BooleanBuilder();
PathBuilder<Component> path = new PathBuilder<>(Component.class, "components");
builder.and(path.get("collectorItems", Map.class).get(collectorType.toString(),List.class).get("id", ObjectId.class).in(collectorItemIds));
return (List<Component>) findAll(builder.getValue());
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/Monitor2Repository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Monitor2;
import org.bson.types.ObjectId;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public interface Monitor2Repository extends PagingAndSortingRepository<Monitor2, ObjectId> {
/**
* Find all {@link Monitor2}s for a given {@link com.capitalone.dashboard.model.Dashboard}.
*
* @param dashboardId dashboard id
* @return list of {@link Monitor2}s
*/
List<Monitor2> findByDashboardId(ObjectId dashboardId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/RelatedCollectorItemRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import org.apache.commons.collections4.CollectionUtils;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Build} data.
*/
public interface RelatedCollectorItemRepository extends CrudRepository<RelatedCollectorItem, ObjectId>, QueryDslPredicateExecutor<RelatedCollectorItem> {
List<RelatedCollectorItem> findRelatedCollectorItemByLeft(ObjectId left);
List<RelatedCollectorItem> findRelatedCollectorItemByRight(ObjectId right);
List<RelatedCollectorItem> findAllByLeftAndRight(ObjectId left, ObjectId right);
default RelatedCollectorItem saveRelatedItems(ObjectId left, ObjectId right, String source, String reason) {
List<RelatedCollectorItem> items = findAllByLeftAndRight(left, right);
if (!CollectionUtils.isEmpty(items)) {
this.delete(items);
}
RelatedCollectorItem related = new RelatedCollectorItem();
related.setLeft(left);
related.setRight(right);
related.setCreationTime(System.currentTimeMillis());
related.setSource(source);
related.setReason(reason);
return save(related);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/PipelineRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Pipeline;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface PipelineRepository extends CrudRepository<Pipeline, ObjectId>, QueryDslPredicateExecutor<Pipeline> {
Pipeline findByCollectorItemId(ObjectId collectorItemId);
List<Pipeline> findByCollectorItemIdIn(List<ObjectId> collectorItemIds);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ConfigurationRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.Configuration;
public interface ConfigurationRepository extends CrudRepository<Configuration, ObjectId> , QueryDslPredicateExecutor<Configuration>{
Configuration findByCollectorName(String collectorNiceName);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/RallyFeatureRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.model.RallyFeature;
/**
* Repository for {@link CodeQuality} data.
*/
public interface RallyFeatureRepository extends CrudRepository<RallyFeature, ObjectId>, QueryDslPredicateExecutor<RallyFeature> {
/**
* Finds the {@link Rallyfeature} data point at the given timestamp for a specific
* {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @param timestamp timstamp
* @return a {@link RallyFeature}
*/
RallyFeature findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
@Query(value="{'projectId' : ?0}")
List<RallyFeature> findByIterationLists(String projectId);
@Query(value="{'projectId' : ?0, options.iterationId : ?1}")
RallyFeature findByRallyWidgetDetails(String projectId,String iterationId);
@Query(value="{'collectorItemId' :?0}")
List<RallyFeature> findByProjectIterationId(Object collectorItemId);
List<RallyFeature> findByCollectorItemIdAndRemainingDaysNot(Object collectorItemId, int remainginDays);
List<RallyFeature> findByProjectId(String projectId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CommitRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Commit;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Commit} data.
*/
public interface CommitRepository extends CrudRepository<Commit, ObjectId>, QueryDslPredicateExecutor<Commit> {
/**
* Finds the {@link Commit} with the given revision number for a specific
* {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @param revisionNumber revision number
* @return a {@link Commit}
*/
Commit findByCollectorItemIdAndScmRevisionNumber(ObjectId collectorItemId, String revisionNumber);
Long countCommitsByCollectorItemId(ObjectId collectorItemId);
Commit findByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndScmRevisionNumber (String scmUrl, String scmBranch, String scmRevisionNumber);
List<Commit> findByScmRevisionNumber (String scmUrl);
List<Commit> findByScmUrlIgnoreCaseAndScmBranch (String scmUrl, String scmBranch);
Commit findByScmRevisionNumberAndScmUrlIgnoreCaseAndScmBranchIgnoreCase(String scmRevisionNumber, String scmUrl, String branch);
List<Commit> findAllByScmRevisionNumberAndScmUrlIgnoreCaseAndScmBranchIgnoreCaseOrderByTimestampAsc (String scmRevisionNumber, String scmUrl, String branch);
@Query(value="{ 'collectorItemId': ?0, 'scmCommitTimestamp': { $gt: ?1 }}")
List<Commit> findByCollectorItemIdAndScmCommitTimestamp(ObjectId collectorItemid, Long scmCommitTimestampThreshold);
List<Commit> findByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndScmCommitTimestampIsBetween(String scmUrl, String scmBranch, long beginDate, long endDate);
List<Commit> findByCollectorItemIdAndScmCommitTimestampIsBetween(ObjectId collectorItemId, long beginDate, long endDate);
List<Commit> findCommitsByCollectorItemIdAndTimestampAfterAndPullNumberIsNull(ObjectId collectorItemId, long beginDate);
Commit findByScmRevisionNumberAndScmAuthorIgnoreCaseAndScmCommitLogAndScmCommitTimestamp(String scmRevisionNumber, String scmAuthor, String scmCommitLog, long scmCommitTimestamp);
List<Commit> findAllByScmRevisionNumberAndScmAuthorIgnoreCaseAndScmCommitLogAndScmCommitTimestamp(String scmRevisionNumber, String scmAuthor, String scmCommitLog, long scmCommitTimestamp);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CodeReposBuildsRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.CodeReposBuilds;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
/**
* Repository for {@link CodeReposBuilds} data.
*/
public interface CodeReposBuildsRepository extends CrudRepository<CodeReposBuilds, ObjectId>, QueryDslPredicateExecutor<CodeReposBuilds> {
CodeReposBuilds findByCodeRepo(String codeRepo);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/MaturityModelRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.MaturityModel;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface MaturityModelRepository extends CrudRepository<MaturityModel, ObjectId>, QueryDslPredicateExecutor<MaturityModel> {
MaturityModel findByProfile(String profile);
@Query(value="{}", fields="{ profile : 1 }")
List<String> getAllProfiles();
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/RepositoryPackage.java
=====================================================
package com.capitalone.dashboard.repository;
/**
* Marker interface for repository scanning
*/
public interface RepositoryPackage {
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/EnvironmentStatusRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.EnvironmentStatus;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* {@link EnvironmentStatus} repository.
*/
public interface EnvironmentStatusRepository extends CrudRepository<EnvironmentStatus, ObjectId> {
/**
* Finds all {@link EnvironmentStatus}es for a given {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item id
* @return list of {@link EnvironmentStatus}es.
*/
List<EnvironmentStatus> findByCollectorItemId(ObjectId collectorItemId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/TeamInventoryRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Scope;
import com.capitalone.dashboard.model.TeamInventory;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link Scope}.
*/
public interface TeamInventoryRepository extends CrudRepository<TeamInventory, ObjectId>,
QueryDslPredicateExecutor<TeamInventory> {
@Query(value = "{ 'collectorId' : ?0 }")
List<TeamInventory> findByCollectorId(ObjectId collectorId);
TeamInventory findByNameAndTeamId(String name, String teamId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/PerformanceRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Performance;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface PerformanceRepository extends CrudRepository<Performance, ObjectId>, QueryDslPredicateExecutor<Performance> {
Performance findByCollectorItemIdAndTimestamp(ObjectId collectorItemId, long timestamp);
List<Performance> findByCollectorItemId (ObjectId collectorItemId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CollectorRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorType;
import org.bson.types.ObjectId;
import java.util.List;
/**
* A {@link Collector} repository
*/
public interface CollectorRepository extends BaseCollectorRepository<Collector> {
List<Collector> findById(ObjectId id);
List<Collector> findAllByCollectorType(CollectorType collectorType);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/ServiceRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Service;
import org.bson.types.ObjectId;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
* A {@link Service} repository
*/
public interface ServiceRepository extends PagingAndSortingRepository<Service, ObjectId> {
/**
* Find all {@link Service}s for a given {@link com.capitalone.dashboard.model.Dashboard}.
*
* @param dashboardId dashboard id
* @return list of {@link Service}s
*/
List<Service> findByDashboardId(ObjectId dashboardId);
/**
* Find all dependent {@link Service}s for a given {@link com.capitalone.dashboard.model.Dashboard}.
*
* @param dashboardId dashboard id
* @return list of {@link Service}s
*/
List<Service> findByDependedBy(ObjectId dashboardId);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/GitRequestRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.GitRequest;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Repository for {@link GitRequest} data.
*/
public interface GitRequestRepository extends CrudRepository<GitRequest, ObjectId>, QueryDslPredicateExecutor<GitRequest> {
List<GitRequest> findByCollectorItemIdAndRequestType(ObjectId collectorItemId, String requestType);
@Query(value="{ 'collectorItemId' : ?0, 'requestType' : ?1}", fields="{ 'number' : 2, 'updatedAt' : 3 }")
List<GitRequest> findRequestNumberAndLastUpdated(ObjectId collectorItemId, String requestType);
@Query(value="{ 'collectorItemId' : ?0, 'state' : { $ne : 'merged' }}", fields="{ 'requestType' : 1, 'number' : 2, 'updatedAt' : 3, 'id' : 4}")
List<GitRequest> findNonMergedRequestNumberAndLastUpdated(ObjectId collectorItemId);
@Query(value="{ 'collectorItemId' : ?0}", fields="{ 'requestType' : 1, 'number' : 2, 'updatedAt' : 3, 'id' : 4}")
List<GitRequest> findRequestNumberAndLastUpdated(ObjectId collectorItemId);
GitRequest findByCollectorItemIdAndScmRevisionNumber(ObjectId collectorItemId, String revisionNumber);
GitRequest findByCollectorItemIdAndNumberAndRequestType(ObjectId collectorItemId, String number, String requestType);
@Query(value="{ 'collectorItemId': ?0, 'scmCommitTimestamp': { $gt: ?1 }}")
List<GitRequest> findByCollectorItemIdAndScmCommitTimestamp(ObjectId collectorItemid,
Long scmCommitTimestampThreshold);
GitRequest findByCollectorItemIdAndNumber(ObjectId collectorItemId, String number);
List<GitRequest> findByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndCreatedAtGreaterThanEqualAndMergedAtLessThanEqual(String scmUrl, String scmBranch, long beginDt, long endDt);
List<GitRequest> findByScmUrlIgnoreCaseAndScmBranchIgnoreCase(String scmUrl, String scmBranch);
List<GitRequest> findByScmRevisionNumber(String revisionNumber);
List<GitRequest> findByCollectorItemIdAndMergedAtIsBetween(ObjectId collectorItemId, long beginDate, long endDate);
GitRequest findByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndNumberAndRequestTypeIgnoreCase(String scmUrl, String scmBranch, String number, String requestType);
@Query(value="{'$or':[{'scmRevisionNumber' : ?0}, {'scmMergeEventRevisionNumber' : ?0}]}")
GitRequest findByScmRevisionNumberOrScmMergeEventRevisionNumber(String revisionNumber);
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/BaseCollectorRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorType;
import org.bson.types.ObjectId;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* Generic Collector repository that contains methods common to any model that extends from
* Collector.
*
* @param <T> Class that extends {@link Collector}
*/
public interface BaseCollectorRepository<T extends Collector> extends CrudRepository<T, ObjectId> {
/**
* Finds a {@link Collector} by its name.
*
* @param name name
* @return a {@link Collector}
*/
T findByName(String name);
/**
* Finds all {@link Collector}s of a given {@link CollectorType}.
*
* @param collectorType a {@link CollectorType}
* @return list of {@link Collector}s of a given {@link CollectorType}
*/
List<T> findByCollectorType(CollectorType collectorType);
/**
* Finds all {@link Collector}s of a given {@link CollectorType}.
*
* @param collectorType a {@link CollectorType}
* @param name
* @return list of {@link Collector}s of a given {@link CollectorType}
*/
List<T> findByCollectorTypeAndName(CollectorType collectorType, String name);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/CustomRepositoryQueryImpl.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.util.GitHubParsedUrl;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Component
public class CustomRepositoryQueryImpl implements CustomRepositoryQuery {
private final MongoTemplate template;
private static final String REGEX_ANY_STRING_INCLUDING_EMPTY = "^$|^.*";
@Autowired
public CustomRepositoryQueryImpl(MongoTemplate template) {
this.template = template;
}
@Override
public List<CollectorItem> findCollectorItemsBySubsetOptions(ObjectId id, Map<String, Object> allOptions, Map<String, Object> uniqueOptions,Map<String, Object> uniqueOptionsFromCollector) {
Criteria c = Criteria.where("collectorId").is(id);
uniqueOptions.values().removeIf(d-> d.equals(null) || ((d instanceof String) && StringUtils.isEmpty((String) d)));
for (Map.Entry<String, Object> e : allOptions.entrySet()) {
if (uniqueOptionsFromCollector.containsKey(e.getKey())) {
c = getCriteria(uniqueOptions, c, e);
}
}
List<CollectorItem> items = template.find(new Query(c), CollectorItem.class);
return items;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/repository/TestResultRepository.java
=====================================================
package com.capitalone.dashboard.repository;
import com.capitalone.dashboard.model.TestResult;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.CrudRepository;
/**
* Repository for {@link TestResult} data.
*/
public interface TestResultRepository extends CrudRepository<TestResult, ObjectId>, QueryDslPredicateExecutor<TestResult> {
/**
* Finds the {@link TestResult} with the given execution ID for a specific
* {@link com.capitalone.dashboard.model.CollectorItem}.
*
* @param collectorItemId collector item ID
* @param executionId execution ID
* @return a TestSuite
*/
TestResult findByCollectorItemIdAndExecutionId(ObjectId collectorItemId, String executionId);
TestResult findByCollectorItemId(ObjectId collectorItemId);
List<TestResult> findByUrlAndTimestampGreaterThanEqualAndTimestampLessThanEqual(String jobUrl,long beginDt,long endDt);
List<TestResult> findByCollectorItemIdAndTimestampIsBetweenOrderByTimestampDesc(ObjectId collectorItemId, long beginDate, long endDate);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/response/BuildDataCreateResponse.java
=====================================================
package com.capitalone.dashboard.response;
import com.capitalone.dashboard.model.BuildStatus;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.bson.types.ObjectId;
public class BuildDataCreateResponse {
private ObjectId id;
private ObjectId collectorItemId;
private ObjectId dashboardId;
private long timestamp;
private String number;
private String buildUrl;
private long startTime;
private long endTime;
private long duration;
private BuildStatus buildStatus;
private String startedBy;
private String log;
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public ObjectId getDashboardId() {
return dashboardId;
}
public void setDashboardId(ObjectId dashboardId) {
this.dashboardId = dashboardId;
}
public long getTimestamp() {
return timestamp;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/response/CloudVolumeAggregatedResponse.java
=====================================================
package com.capitalone.dashboard.response;
public class CloudVolumeAggregatedResponse {
private int nonEncryptedCount;
private int noAttachmentCount;
private int noAccountCount;
private int nonTaggedCount;
private int totalCount;
private long lastUpdated;
public int getNonEncryptedCount() {
return nonEncryptedCount;
}
public void setNonEncryptedCount(int nonEncryptedCount) {
this.nonEncryptedCount = nonEncryptedCount;
}
public int getNoAttachmentCount() {
return noAttachmentCount;
}
public void setNoAttachmentCount(int noAttachmentCount) {
this.noAttachmentCount = noAttachmentCount;
}
public int getNoAccountCount() {
return noAccountCount;
}
public void setNoAccountCount(int noAccountCount) {
this.noAccountCount = noAccountCount;
}
public int getNonTaggedCount() {
return nonTaggedCount;
}
public void setNonTaggedCount(int nonTaggedCount) {
this.nonTaggedCount = nonTaggedCount;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/response/CloudVirtualNetworkAggregatedResponse.java
=====================================================
package com.capitalone.dashboard.response;
public class CloudVirtualNetworkAggregatedResponse {
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/response/RallyBurnDownResponse.java
=====================================================
package com.capitalone.dashboard.response;
import java.util.List;
public class RallyBurnDownResponse {
private List<String> iterationDates;
private List<String> toDoHours;
private List<Double> acceptedPoints;
private List<Double> totalTaskEstimate;
public List<Double> getTotalTaskEstimate() {
return totalTaskEstimate;
}
public void setTotalTaskEstimate(List<Double> totalTaskEstimate) {
this.totalTaskEstimate = totalTaskEstimate;
}
public List<String> getIterationDates() {
return iterationDates;
}
public void setIterationDates(List<String> iterationDates) {
this.iterationDates = iterationDates;
}
public List<String> getToDoHours() {
return toDoHours;
}
public void setToDoHours(List<String> toDoHours) {
this.toDoHours = toDoHours;
}
public List<Double> getAcceptedPoints() {
return acceptedPoints;
}
@Override
public String toString() {
return "RallyBurnDownResponse [iterationDates=" + iterationDates + ", toDoHours=" + toDoHours
+ ", acceptedPoints=" + acceptedPoints + "]";
}
public void setAcceptedPoints(List<Double> acceptedPoints) {
this.acceptedPoints = acceptedPoints;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/response/CloudSubNetworkAggregatedResponse.java
=====================================================
package com.capitalone.dashboard.response;
public class CloudSubNetworkAggregatedResponse {
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/PipelineUtils.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineCommit;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.RepoBranch;
import com.capitalone.dashboard.model.SCM;
import com.capitalone.dashboard.model.Widget;
import com.capitalone.dashboard.repository.CommitRepository;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public final class PipelineUtils {
private PipelineUtils(){
}
public static Map<String, PipelineCommit> commitSetToMap(Set<PipelineCommit> set){
Map<String, PipelineCommit> returnMap = new HashMap<>();
for(PipelineCommit commit : set){
returnMap.put(commit.getScmRevisionNumber(), commit);
}
return returnMap;
}
public static Map<PipelineStage, String> getStageToEnvironmentNameMap(Dashboard dashboard) {
Map<PipelineStage, String> rt = new LinkedHashMap<>();
for(Widget widget : dashboard.getWidgets()) {
if(widget.getName().equalsIgnoreCase("build")){
rt.put(PipelineStage.valueOf("Build"), "Build");
}if(widget.getName().equalsIgnoreCase("repo")){
rt.put(PipelineStage.valueOf("Commit"), "Commit");
}
if (widget.getName().equalsIgnoreCase("pipeline")) {
Map<?,?> gh = (Map<?,?>) widget.getOptions().get("mappings");
for (Map.Entry<?, ?> entry : gh.entrySet()) {
rt.put(PipelineStage.valueOf((String) entry.getKey()), (String) entry.getValue());
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/EncryptionException.java
=====================================================
package com.capitalone.dashboard.util;
public class EncryptionException extends Exception {
private static final long serialVersionUID = -4472911532254883259L;
/**
* Constructs a {@code EncrytionException} with no detail message.
*/
public EncryptionException() {
super();
}
/**
* Constructs a {@code EncrytionException} with the specified
* detail message.
*
* @param s the detail message.
*/
public EncryptionException(String s) {
super(s);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/FeatureCollectorConstants.java
=====================================================
package com.capitalone.dashboard.util;
/**
* This class is established to house any globally-referenced constant values.
* Most values that can or should be modifiable at deploy-time should be kept in
* a properties file, but valid use cases for constant values should be added
* here.
*
* @author kfk884
*
*/
public final class FeatureCollectorConstants {
public static final String JIRA = "Jira";
public static final String JIRA_XRAY = "Jira XRay";
public static final String VERSIONONE = "VersionOne";
public static final String GITLAB = "GitlabFeature";
@SuppressWarnings("PMD.AvoidUsingHardCodedIP")
// not an IP
public static final String AGENT_VER = "01.00.00.01";
public static final String AGENT_NAME = "Hygieia Dashboard - VersionOne Feature Collector";
public static final String STORY_HOURS_ESTIMATE = "hours";
public static final String STORY_POINTS_ESTIMATE = "storypoints";
public static final String STORY_COUNT_ESTIMATE = "count";
public static final String SPRINT_SCRUM = "scrum";
public static final String SPRINT_KANBAN = "kanban";
public static final String TEAM_ID_ANY = "any";
public static final String PROJECT_ID_ANY = "any";
public static final String TOOL_TYPE = "featureTool";
public static final String PROJECT_NAME = "projectName";
public static final String PROJECT_ID = "projectId";
public static final String TEAM_NAME = "teamName";
public static final String TEAM_ID = "teamId";
public static final String ESTIMATE_METRIC_TYPE = "estimateMetricType";
public static final String SPRINT_TYPE = "sprintType";
public static final String LIST_TYPE = "listType";
public static final String SHOW_STATUS = "showStatus";
private FeatureCollectorConstants() {
// This class should not be instantiable
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/CoreFeatureSettings.java
=====================================================
package com.capitalone.dashboard.util;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "feature")
public class CoreFeatureSettings {
private List<String> todoStatuses;
private List<String> doingStatuses;
private List<String> doneStatuses;
public List<String> getTodoStatuses() {
return todoStatuses;
}
public void setTodoStatuses(List<String> todoStatuses) {
this.todoStatuses = todoStatuses;
}
public List<String> getDoingStatuses() {
return doingStatuses;
}
public void setDoingStatuses(List<String> doingStatuses) {
this.doingStatuses = doingStatuses;
}
public List<String> getDoneStatuses() {
return doneStatuses;
}
public void setDoneStatuses(List<String> doneStatuses) {
this.doneStatuses = doneStatuses;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/Supplier.java
=====================================================
package com.capitalone.dashboard.util;
/**
* A class that can supply objects of a single type. Semantically, this could
* be a factory, generator, builder, closure, or something else entirely. No
* guarantees are implied by this interface.
*
*/
public interface Supplier<T> {
/**
* Retrieves an instance of the appropriate type. The returned object may or
* may not be a new instance, depending on the implementation.
*
* @return an instance of the appropriate type
*/
T get();
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/HygieiaUtils.java
=====================================================
package com.capitalone.dashboard.util;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.lang3.StringUtils;
import org.jboss.logging.Logger;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
public class HygieiaUtils {
private static final Logger LOGGER = Logger.getLogger(HygieiaUtils.class);
public static void mergeObjects(Object dest, Object source) throws IllegalAccessException, InvocationTargetException {
new BeanUtilsBean() {
@Override
public void copyProperty(Object dest, String name, Object value)
throws IllegalAccessException, InvocationTargetException {
if (value != null) {
super.copyProperty(dest, name, value);
}
}
}.copyProperties(dest, source);
}
/**
* Determines if two urls are equal accounting for load balancers and variations in schemes.
* <p>
* Two urls are equal if:
* <ul>
* <li>the root domain is the same</li>
* <li>the path is the same (ignoring .git at the end)</li>
* <li>the query is the same</li>
* </ul>
* <p>
* It is assumed that load balancers use a distinct subdomain in a url.
*
* @param url1
* @param url2
* @return if the two urls are equal ignoring load balancers, url schemes, and path endings.
*/
@SuppressWarnings("PMD.NPathComplexity")
public static boolean smartUrlEquals(String url1, String url2) {
String u1 = nullSafe(url1);
String u2 = nullSafe(url2);
String u1Host = null;
String u1Path = null;
String u1Query = null;
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/SuperFeatureComparator.java
=====================================================
package com.capitalone.dashboard.util;
import java.util.Comparator;
import com.capitalone.dashboard.model.Feature;
/**
* Comparator utility class for handling comparisons of Super Features (epics)
* to other Super Features. This is used when manipulating results of MongoDB
* repository responses and sorting them in an efficient manner within memory.
*
* @author kfk884
*
*/
public class SuperFeatureComparator implements Comparator<Feature> {
public SuperFeatureComparator() {
// No instantiation requirements
}
/**
* Compares two feature object models and sorts based on their subsequent
* epic IDs, as a string comparator
*
* @return A list of Features sorted by EpicID, descending
*/
@Override
public int compare(Feature f, Feature ff) {
if (f.getsEpicID().compareToIgnoreCase(ff.getsEpicID()) <= -1) {
return -1;
} else if (f.getsEpicID().compareToIgnoreCase(ff.getsEpicID()) >= 1) {
return 1;
} else {
return 0;
}
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/Encryption.java
=====================================================
package com.capitalone.dashboard.util;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@SuppressWarnings("PMD.AvoidCatchingNPE") // TODO: Avoid catching NullPointerException; consider removing the cause of the NPE
public final class Encryption {
private static final String ALGO = "DESede";
private static final Logger LOGGER = LoggerFactory.getLogger(Encryption.class);
private Encryption() {
// util class.
}
public static String getStringKey() throws EncryptionException {
SecretKey key = null;
try {
key = KeyGenerator.getInstance(ALGO).generateKey();
} catch (NoSuchAlgorithmException e) {
throw new EncryptionException("Cannot generate a secret key" + '\n' + e.getMessage());
}
return Base64.encodeBase64String(key.getEncoded());
}
public static SecretKey getSecretKey() throws EncryptionException {
SecretKey key = null;
try {
key = KeyGenerator.getInstance(ALGO).generateKey();
} catch (NoSuchAlgorithmException e) {
throw new EncryptionException("Cannot generate a secret key" + '\n' + e.getMessage());
}
return key;
}
public static String encryptString(String message, SecretKey key)
throws EncryptionException {
String encryptedMessage = "";
try {
Cipher cipher = Cipher.getInstance(ALGO);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedBytes = cipher.doFinal(message.getBytes());
encryptedMessage = Base64.encodeBase64String(encryptedBytes);
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/DashboardUtils.java
=====================================================
package com.capitalone.dashboard.util;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.repository.ComponentRepository;
import org.bson.types.ObjectId;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public final class DashboardUtils {
/**
* Gets a unique set of collector item ids for a given collector from all components in the Hygieia instance.
* @param componentRepository component repo
* @param collector collector
* @return unique set of collector item ids
*/
public static Set<ObjectId> getUniqueCollectorItemIDsFromAllComponents(ComponentRepository componentRepository, Collector collector) {
Set<ObjectId> uniqueIDs = new HashSet<>();
for (com.capitalone.dashboard.model.Component comp : componentRepository.findAll()) {
if (comp.getCollectorItems() == null || comp.getCollectorItems().isEmpty()) continue;
List<CollectorItem> itemList = comp.getCollectorItems().get(collector.getCollectorType());
if (itemList == null) continue;
for (CollectorItem ci : itemList) {
if (ci != null && ci.getCollectorId().equals(collector.getId())) {
uniqueIDs.add(ci.getId());
}
}
}
return uniqueIDs;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/GitHubParsedUrl.java
=====================================================
package com.capitalone.dashboard.util;
public class GitHubParsedUrl {
private String url;
private String host;
private String apiUrl;
private String orgName;
private String repoName;
public GitHubParsedUrl(String url){
this.url = url;
parse();
}
private void parse(){
if (url.endsWith(".git")) {
url = url.substring(0, url.lastIndexOf(".git"));
}
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getApiUrl() {
return apiUrl;
}
public void setApiUrl(String apiUrl) {
this.apiUrl = apiUrl;
}
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/GitBranchSpec.java
=====================================================
package com.capitalone.dashboard.util;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
public class GitBranchSpec {
private String name;
public String getName() {
return name;
}
private void setName(String name) {
if (name == null) {
throw new IllegalArgumentException();
} else if (name.length() == 0) {
this.name = "**";
} else {
this.name = name.trim();
}
}
public GitBranchSpec(String name) {
setName(name);
}
public String toString() {
return name;
}
public boolean matches(String item) {
return getPattern().matcher(item).matches();
}
private Pattern getPattern() {
String expandedName = name;
// use regex syntax directly if name starts with colon
if ((expandedName.charAt(0) == ':') && (expandedName.length() > 1)) {
String regexSubstring = expandedName.substring(1, expandedName.length());
return Pattern.compile(regexSubstring);
}
// build a pattern into this builder
StringBuilder builder = new StringBuilder(100);
// for legacy reasons (sic) we do support various branch spec format to declare remotes / branches
builder.append("(refs/heads/");
=====================================================
== File: src/main/java/com/capitalone/dashboard/util/UnsafeDeleteException.java
=====================================================
package com.capitalone.dashboard.util;
/**
* Created by jkc on 1/20/16.
*/
public class UnsafeDeleteException extends RuntimeException {
private static final long serialVersionUID = -664077740219817001L;
public UnsafeDeleteException() {
super();
}
public UnsafeDeleteException(String s) {
super(s);
}
public UnsafeDeleteException(String s, Throwable throwable) {
super(s, throwable);
}
public UnsafeDeleteException(Throwable throwable) {
super(throwable);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/config/CollectorConfig.java
=====================================================
package com.capitalone.dashboard.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
/**
* Configuration class that creates Beans common to any Collector implementation
*/
@Configuration
public class CollectorConfig {
@Bean
public TaskScheduler taskScheduler() {
return new ThreadPoolTaskScheduler();
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/config/collector/CloudConfig.java
=====================================================
package com.capitalone.dashboard.config.collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.NameValue;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class CloudConfig extends CollectorItem {
private static final String CLOUD_PROVIDER = "provider";
private static final List<NameValue> TAGS = new ArrayList<>();
private static final int AGE_ERROR_THRESHOLD_DEFAULT = 60;
private static final int AGE_ALERT_THRESHOLD_DEFAULT = 45;
private static final double CPU_ERROR_THRESHOLD_DEFAULT = 80.0;
private static final double CPU_ALERT_THRESHOLD_DEFAULT = 50.0;
private static final double MEMORY_ERROR_THRESHOLD_DEFAULT = 80.0;
private static final double MEMORY_ALERT_THRESHOLD_DEFAULT = 50.0;
private static final int DISK_IO_ERROR_THRESHOLD_DEFAULT = 80;
private static final int DISK_IO_ALERT_THRESHOLD_DEFAULT = 50;
private static final int NETWORK_IO_ERROR_THRESHOLD_DEFAULT = 80;
private static final int NETWORK_IO_ALERT_THRESHOLD_DEFAULT = 50;
// private static final int SUBNET_IP_ERROR_THRESHOLD_DEFAULT = 80;
// private static final int SUBNET_IP_ALERT_THRESHOLD_DEFAULT = 50;
private static final String AGE_ERROR = "ageError";
private static final String AGE_ALERT = "ageAlert";
private static final String CPU_ERROR = "cpuError";
private static final String CPU_ALERT = "cpuAlert";
private static final String MEMORY_ERROR = "memoryError";
private static final String MEMORY_ALERT = "memoryAlert";
private static final String DISKIO_ERROR = "diskIOError";
private static final String DISKIO_ALERT = "diskIOAlert";
private static final String NETWORKIO_ERROR = "networkIOError";
private static final String NETWORKIO_ALERT = "networkIOAlert";
public String getCloudProvider() {
return (String) getOptions().get(CLOUD_PROVIDER);
}
public void setCloudProvider(String cloudProvider) {
getOptions().put(CLOUD_PROVIDER, cloudProvider);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/config/MongoConfig.java
=====================================================
package com.capitalone.dashboard.config;
import com.capitalone.dashboard.repository.RepositoryPackage;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Component
@EnableMongoRepositories(basePackageClasses = RepositoryPackage.class)
public class MongoConfig extends AbstractMongoConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(MongoConfig.class);
@Value("${dbname:dashboard}")
private String databaseName;
@Value("${dbhost:localhost}")
private String host;
@Value("${dbport:27017}")
private int port;
@Value("${dbreplicaset:false}")
private String dbreplicaset;
@Value("#{'${dbhostport:localhost:27017}'.split(',')}")
private List<String> hostport;
@Value("${dbusername:}")
private String userName;
@Value("${dbpassword:}")
private String password;
@Override
protected String getDatabaseName() {
return databaseName;
}
@Override
=====================================================
== File: src/main/java/com/capitalone/dashboard/collector/CollectorTask.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.repository.BaseCollectorRepository;
import com.google.common.base.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* Base class for Collector task implementation which provides subclasses with
* the following:
* <p>
* <ol>
* <li>Creates a Collector instance the first time the collector runs.</li>
* <li>Uses TaskScheduler to schedule the job based on the provided cron when the process starts.</li>
* <li>Saves the last execution time on the collector when the collection run finishes.</li>
* <li>Sets the collector online/offline when the collector process starts/stops</li>
* </ol>
*
* @param <T> Class that extends Collector
*/
@Component
public abstract class CollectorTask<T extends Collector> implements Runnable {
private static final Logger LOGGER = LoggerFactory.getLogger(CollectorTask.class);
private final TaskScheduler taskScheduler;
private final String collectorName;
@Autowired
protected CollectorTask(TaskScheduler taskScheduler, String collectorName) {
this.taskScheduler = taskScheduler;
this.collectorName = collectorName;
}
@Override
public final void run() {
LOGGER.info("Running Collector: {}", collectorName);
T collector = getCollectorRepository().findByName(collectorName);
if (collector == null) {
// Register new collector
collector = getCollectorRepository().save(getCollector());
} else {
// In case the collector options changed via collectors properties setup.
=====================================================
== File: src/main/java/com/capitalone/dashboard/collector/CollectorTaskWithGenericItem.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.GenericCollectorItem;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.GenericCollectorItemRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Component
public abstract class CollectorTaskWithGenericItem<T extends Collector> extends CollectorTask<T> {
private final CollectorItemRepository collectorItemRepository;
private final GenericCollectorItemRepository genericCollectorItemRepository;
private final RelatedCollectorItemRepository relatedCollectorItemRepository;
@Autowired
public CollectorTaskWithGenericItem(TaskScheduler taskScheduler, String collectorName, CollectorItemRepository collectorItemRepository, GenericCollectorItemRepository genericCollectorItemRepository, RelatedCollectorItemRepository relatedCollectorItemRepository) {
super(taskScheduler, collectorName);
this.collectorItemRepository = collectorItemRepository;
this.genericCollectorItemRepository = genericCollectorItemRepository;
this.relatedCollectorItemRepository = relatedCollectorItemRepository;
}
public Map<ObjectId, Set<ObjectId>> processGenericItems(List<String> toolServers) {
List<GenericCollectorItem> genericCollectorItems = genericCollectorItemRepository.findAllByToolNameAndProcessTimeEquals(getCollector().getName(), 0L);
if (CollectionUtils.isEmpty(genericCollectorItems)) {
return Collections.emptyMap();
}
Map<ObjectId, Set<ObjectId>> collectorItemBuildIds = new HashMap<>();
genericCollectorItems.forEach(gci -> {
toolServers.stream()
.map(server -> Lists.newArrayList(collectorItemRepository.findAllByOptionMapAndCollectorIdsIn(getGenericCollectorItemOptions(server, gci), Lists.newArrayList(getCollector().getId()))))
.forEach(collectorItems -> collectorItems.forEach(item -> {
//Save as related item. Related Item event listener will process it.
if (!collectorItemBuildIds.containsKey(item.getId())) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/collector/RestOperationsSupplier.java
=====================================================
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.util.Supplier;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestOperations;
import org.springframework.web.client.RestTemplate;
/**
* Supplier that returns an instance of RestOperations
*/
@Component
public class RestOperationsSupplier implements Supplier<RestOperations> {
@Override
public RestOperations get() {
return new RestTemplate();
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/status/LibraryPolicyAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum LibraryPolicyAuditStatus {
LIBRARY_POLICY_AUDIT_FAIL,
LIBRARY_POLICY_SCAN_FAIL,
LIBRARY_POLICY_AUDIT_MISSING,
LIBRARY_POLICY_AUDIT_DETAIL_MISSING,
LIBRARY_POLICY_AUDIT_OK,
LIBRARY_POLICY_FOUND_HIGH_SECURITY,
LIBRARY_POLICY_FOUND_HIGH_LICENSE,
LIBRARY_POLICY_FOUND_CRITICAL_SECURITY,
LIBRARY_POLICY_FOUND_CRITICAL_LICENSE
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/status/CodeReviewAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum CodeReviewAuditStatus {
//peer review type LGTM, GH REVIEW, COMMENTS ONLY
PEER_REVIEW_LGTM_SELF_APPROVAL,
PEER_REVIEW_LGTM_ERROR,
PEER_REVIEW_LGTM_PENDING,
PEER_REVIEW_LGTM_UNKNOWN,
PEER_REVIEW_LGTM_SUCCESS,
PEER_REVIEW_BY_SERVICEACCOUNT,
PEER_REVIEW_GHR,
PEER_REVIEW_GHR_SELF_APPROVAL,
PEER_REVIEW_REG_COMMENTS,
PEER_REVIEW_REV_COMMENTS,
//no pull requests for queried date range
NO_PULL_REQ_FOR_DATE_RANGE,
//direct commits to master
DIRECT_COMMITS_TO_BASE,
DIRECT_COMMITS_TO_BASE_FIRST_COMMIT,
COMMIT_AUTHOR_EQ_SYSTEM_USER,
DIRECT_COMMIT_NONCODE_CHANGE,
DIRECT_COMMIT_NONCODE_CHANGE_SERVICE_ACCOUNT,
DIRECT_COMMIT_NONCODE_CHANGE_USER_ACCOUNT,
//commit author v/s who merged the pr
COMMITAUTHOR_NE_MERGECOMMITER,
COMMITAUTHOR_EQ_MERGECOMMITER,
MERGECOMMITER_NOT_FOUND,
COMMITAUTHOR_EQ_SERVICEACCOUNT,
MERGECOMMITER_EQ_SERVICEACCOUNT,
//peer review of a pull request
PULLREQ_REVIEWED_BY_PEER,
PULLREQ_NOT_PEER_REVIEWED,
BASE_FIRST_COMMIT,
//type of git workflow
GIT_FORK_STRATEGY,
GIT_BRANCH_STRATEGY,
GIT_NO_WORKFLOW,
REPO_NOT_CONFIGURED,
PENDING_DATA_COLLECTION,
NO_COMMIT_FOR_DATE_RANGE, //Removew this later when we can remove legacy peer review
COMMIT_AFTER_PR_MERGE, COLLECTOR_ITEM_ERROR,
SCM_AUTHOR_LOGIN_INVALID, //passed when SCM AUTHOR is unavailable
DIRECT_COMMIT_CHANGE_WHITELISTED_ACCOUNT
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/status/CodeQualityAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum CodeQualityAuditStatus {
CODE_QUALITY_AUDIT_FAIL,
STATIC_SECURITY_SCAN_FAIL,
CODE_QUALITY_AUDIT_GATE_MISSING,
QUALITY_PROFILE_VALIDATION_AUDIT_OK,
QUALITY_PROFILE_VALIDATION_AUDIT_FAIL,
QUALITY_PROFILE_VALIDATION_AUDIT_NO_CHANGE,
CODE_QUALITY_AUDIT_OK,
CODE_QUALITY_DETAIL_MISSING,
STATIC_SECURITY_SCAN_AUDIT_NO_CHANGE,
STATIC_SECURITY_SCAN_MISSING,
STATIC_SECURITY_SCAN_OK,
STATIC_SECURITY_SCAN_NO_CLOSED_FINDINGS,
STATIC_SECURITY_SCAN_FOUND_CRITICAL,
STATIC_SECURITY_SCAN_FOUND_HIGH,
COLLECTOR_ITEM_ERROR,
CODE_QUALITY_NOT_CONFIGURED,
CODE_QUALITY_GATES_FOUND,
CODE_QUALITY_CHECK_IS_CURRENT,
CODE_QUALITY_THRESHOLD_BLOCKER_MET,
CODE_QUALITY_THRESHOLD_CRITICAL_MET,
CODE_QUALITY_THRESHOLD_UNIT_TEST_MET,
CODE_QUALITY_THRESHOLD_CODE_COVERAGE_MET,
CODE_QUALITY_THRESHOLD_BLOCKER_FOUND,
CODE_QUALITY_THRESHOLD_CRITICAL_FOUND,
CODE_QUALITY_THRESHOLD_UNIT_TEST_FOUND,
CODE_QUALITY_THRESHOLD_CODE_COVERAGE_FOUND
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/status/ArtifactAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum ArtifactAuditStatus {
ART_SYS_ACCT_BUILD_AUTO,
ART_SYS_ACCT_BUILD_USER,
ART_DOCK_IMG_FOUND,
ART_SYS_ACCT_BUILD_THIRD_PARTY,
COLLECTOR_ITEM_ERROR,
NO_ACTIVITY,
UNAVAILABLE,
ART_PROD_DEPLOY_OK,
ART_PROD_DEPLOY_FAIL,
ART_TEST_FOUND,
ART_TEST_NOT_FOUND,
ARTIFACT_NOT_CONFIGURED
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/status/TestResultAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum TestResultAuditStatus {
TEST_RESULT_AUDIT_FAIL,
TEST_RESULT_AUDIT_MISSING,
TEST_RESULT_MISSING,
TEST_RESULT_AUDIT_OK,
TEST_RESULT_SKIPPED,
TEST_RESULTS_TRACEABILITY_NOT_FOUND,
TEST_RESULTS_TRACEABILITY_STORY_NOT_FOUND,
TEST_RESULTS_TRACEABILITY_STORY_MATCH,
TEST_RESULTS_TRACEABILITY_THRESHOLD_DEFAULT,
TEST_RESULTS_TRACEABILITY_STORY_STATUS_INVALID,
TEST_RESULTS_TRACEABILITY_NOT_FOUND_IN_GIVEN_DATE_RANGE
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/status/PerformanceTestAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum PerformanceTestAuditStatus {
PERF_RESULT_AUDIT_FAIL,
PERF_RESULT_AUDIT_MISSING,
PERF_RESULT_AUDIT_OK,
PERFORMANCE_THRESHOLD_RESPONSE_TIME_MET,
PERFORMANCE_THRESHOLD_TRANSACTIONS_PER_SECOND_MET,
PERFORMANCE_THRESHOLD_ERROR_RATE_MET,
PERFORMANCE_COMMIT_IS_CURRENT,
PERFORMANCE_THRESHOLDS_ERROR_RATE_FOUND,
PERFORMANCE_THRESHOLDS_TRANSACTIONS_PER_SECOND_FOUND,
PERFORMANCE_THRESHOLDS_RESPONSE_TIME_FOUND,
PERFORMANCE_MET,
PERFORMANCE_CHANGE_UNAUTHORIZED,
COLLECTOR_ITEM_ERROR
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/status/BuildAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum BuildAuditStatus{
BUILD_JOB_IS_NON_PROD,
BUILD_JOB_CONFIGURATION_REVIEW_FAIL,
BUILD_JOB_CONFIGURATION_REVIEW_PASS,
BUILD_JOB_CONFIGURATION_NO_CHANGE,
COLLECTOR_ITEM_ERROR, BUILD_MATCHES_REPO, BUILD_REPO_MISMATCH, BUILD_AUTHOR_EQ_REPO_AUTHOR, BUILD_AUTHOR_NE_REPO_AUTHOR, NO_BUILD_FOUND, BUILD_JOB_IS_PROD
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/status/DashboardAuditStatus.java
=====================================================
package com.capitalone.dashboard.status;
public enum DashboardAuditStatus {
DASHBOARD_BAD_LOOKUP_DATA,
DASHBOARD_REPO_NOT_CONFIGURED,
DASHBOARD_BUILD_CONFIGURED,
DASHBOARD_BUILD_NOT_CONFIGURED,
DASHBOARD_CODEQUALITY_CONFIGURED,
DASHBOARD_CODEQUALITY_NOT_CONFIGURED,
DASHBOARD_STATIC_SECURITY_ANALYSIS_CONFIGURED,
DASHBOARD_STATIC_SECURITY_ANALYSIS_NOT_CONFIGURED,
DASHBOARD_LIBRARY_POLICY_ANALYSIS_CONFIGURED,
DASHBOARD_LIBRARY_POLICY_ANALYSIS_NOT_CONFIGURED,
DASHBOARD_NOT_REGISTERED,
DASHBOARD_TEST_CONFIGURED,
DASHBOARD_TEST_NOT_CONFIGURED,
DASHBOARD_REPO_BUILD_VALID,
DASHBOARD_REPO_BUILD_INVALID,
DASHBOARD_REPO_PR_AUTHOR_EQ_BUILD_AUTHOR,
DASHBOARD_REPO_PR_AUTHOR_NE_BUILD_AUTHOR,
// Error collecting from repo
COLLECTOR_ITEM_ERROR, // Git repo not configured
DASHBOARD_PERFORMANCE_TEST_CONFIGURED, DASHBOARD_PERFORMANCE_TEST_NOT_CONFIGURED, DASHBOARD_REPO_CONFIGURED,
DASHBOARD_ARTIFACT_CONFIGURED,DASHBOARD_ARTIFACT_NOT_CONFIGURED
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/JobCollectorItem.java
=====================================================
package com.capitalone.dashboard.model;
public class JobCollectorItem extends CollectorItem {
protected static final String INSTANCE_URL = "instanceUrl";
protected static final String JOB_NAME = "jobName";
protected static final String JOB_URL = "jobUrl";
public String getInstanceUrl() {
return (String) getOptions().get(INSTANCE_URL);
}
public void setInstanceUrl(String instanceUrl) {
getOptions().put(INSTANCE_URL, instanceUrl);
}
public String getJobName() {
return (String) getOptions().get(JOB_NAME);
}
public void setJobName(String jobName) {
getOptions().put(JOB_NAME, jobName);
}
public String getJobUrl() {
return (String) getOptions().get(JOB_URL);
}
public void setJobUrl(String jobUrl) {
getOptions().put(JOB_URL, jobUrl);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubRepo.java
=====================================================
package com.capitalone.dashboard.model.webhook.github;
import com.capitalone.dashboard.model.CollectorItem;
/**
* CollectorItem extension to store the github repo url and branch.
*/
public class GitHubRepo extends CollectorItem {
public static final String REPO_URL = "url"; // http://github.company.com/jack/somejavacode
public static final String BRANCH = "branch"; // master, development etc.
public static final String USER_ID = "userID";
public static final String PASSWORD = "password";
public static final String PERSONAL_ACCESS_TOKEN = "personalAccessToken";
public String getUserId() {
return (String) getOptions().get(USER_ID);
}
public String getPassword() {
return (String) getOptions().get(PASSWORD);
}
public String getRepoUrl() {
return (String) getOptions().get(REPO_URL);
}
public void setRepoUrl(String instanceUrl) {
getOptions().put(REPO_URL, instanceUrl);
}
public String getBranch() {
return (String) getOptions().get(BRANCH);
}
public void setBranch(String branch) {
getOptions().put(BRANCH, branch);
}
public String getPersonalAccessToken() {
return String.valueOf(getOptions().get(PERSONAL_ACCESS_TOKEN));
}
public void setPersonalAccessToken(String personalAccessToken) {
getOptions().put(PERSONAL_ACCESS_TOKEN, personalAccessToken);
}
@Override
public boolean equals(Object o) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/webhook/github/GitHubParsed.java
=====================================================
package com.capitalone.dashboard.model.webhook.github;
import com.capitalone.dashboard.misc.HygieiaException;
import java.net.MalformedURLException;
import java.net.URL;
public class GitHubParsed {
private String url;
private String apiUrl;
private String baseApiUrl;
private String graphQLUrl;
private String orgName;
private String repoName;
private static final String SEGMENT_API = "/api/v3/repos";
private static final String BASE_API = "/api/v3/";
private static final String PUBLIC_GITHUB_BASE_API = "api.github.com/";
private static final String PUBLIC_GITHUB_REPO_HOST = "api.github.com/repos";
private static final String PUBLIC_GITHUB_HOST_NAME = "github.com";
private static final String SEGMENT_GRAPHQL = "/api/graphql";
private static final String PUBLIC_GITHUB_GRAPHQL = "api.github.com/graphql";
public GitHubParsed(String url) throws MalformedURLException, HygieiaException {
this.url = url;
parse();
}
private void parse() throws MalformedURLException, HygieiaException {
if (url.endsWith(".git")) {
url = url.substring(0, url.lastIndexOf(".git"));
}
URL u = new URL(url);
String host = u.getHost();
String protocol = u.getProtocol();
String path = u.getPath();
String[] parts = path.split("/");
if (parts.length < 3) {
throw new HygieiaException("Bad github repo URL: " + url, HygieiaException.BAD_DATA);
}
orgName = parts[1];
repoName = parts[2];
if (host.startsWith(PUBLIC_GITHUB_HOST_NAME)) {
baseApiUrl = protocol + "://" + PUBLIC_GITHUB_BASE_API;
apiUrl = protocol + "://" + PUBLIC_GITHUB_REPO_HOST + path;
graphQLUrl = protocol + "://" + PUBLIC_GITHUB_GRAPHQL;
} else {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/webhook/github/MergeEvent.java
=====================================================
package com.capitalone.dashboard.model.webhook.github;
import java.util.Objects;
public class MergeEvent {
private String mergeSha;
private String gitRequestNumber;
private String mergeRef;
private String mergeAuthor;
private String mergeAuthorLDAPDN;
private long mergedAt;
public String getMergeSha() {
return mergeSha;
}
public void setMergeSha(String mergeSha) {
this.mergeSha = mergeSha;
}
public String getGitRequestNumber() {
return gitRequestNumber;
}
public void setGitRequestNumber(String gitRequestNumber) {
this.gitRequestNumber = gitRequestNumber;
}
public String getMergeRef() {
return mergeRef;
}
public void setMergeRef(String mergeRef) {
this.mergeRef = mergeRef;
}
public String getMergeAuthor() {
return mergeAuthor;
}
public void setMergeAuthor(String mergeAuthor) {
this.mergeAuthor = mergeAuthor;
}
public String getMergeAuthorLDAPDN() {
return mergeAuthorLDAPDN;
}
public void setMergeAuthorLDAPDN(String mergeAuthorLDAPDN) {
this.mergeAuthorLDAPDN = mergeAuthorLDAPDN;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/RallyFeatureType.java
=====================================================
package com.capitalone.dashboard.model;
public enum RallyFeatureType {
Feature(CollectorType.Feature);
private final CollectorType collectorType;
RallyFeatureType(CollectorType collectorType) {
this.collectorType = collectorType;
}
public static RallyFeatureType fromString(String value) {
for (RallyFeatureType rallyFeatureType : values()) {
if (rallyFeatureType.toString().equalsIgnoreCase(value)) {
return rallyFeatureType;
}
}
throw new IllegalArgumentException(value + " is not a valid RallyFeatureType.");
}
public CollectorType collectorType() {
return collectorType;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/BaseModel.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
/**
* Base class for all Mongo model classes that has an id property.
*/
public class BaseModel {
@Id
private ObjectId id;
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
/*
* Note:
*
* Having hashcode + equals is more complicated than simply comparing ObjectIds since
* it does not provide a way to properly compare models that have not been saved yet.
*/
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Build.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
/**
* The result of a Continuous Integration build execution. Typically produces binary artifacts.
* Often triggered by one or more SCM commits.
*
* Possible collectors:
* Hudson (in scope)
* Team City
* TFS
* Go
* Bamboo
* TravisCI
*
*/
@Document(collection="builds")
public class Build extends BaseModel {
private ObjectId collectorItemId;
private long timestamp;
private String number;
private String buildUrl;
private long startTime;
private long endTime;
private long duration;
private BuildStatus buildStatus;
private String startedBy;
private String log;
private List<RepoBranch> codeRepos = new ArrayList<>();
private List<SCM> sourceChangeSet = new ArrayList<>();
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public void setSourceChangeSet(List<SCM> sourceChangeSet) {
this.sourceChangeSet = sourceChangeSet;
}
public long getTimestamp() {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TestCaseStep.java
=====================================================
package com.capitalone.dashboard.model;
public class TestCaseStep {
/**
* Identifies this test case step in the source system
*/
private String id;
/**
* Description of the test case step that might make sense to a human
*/
private String description;
/**
* Test case duration in milliseconds
*/
private long duration;
/**
* Status of the test case step
*/
private TestCaseStatus status;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public long getDuration() {
return duration;
}
public void setDuration(long duration) {
this.duration = duration;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/GitRequest.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
@Document(collection="gitrequests")
public class GitRequest {
// fields added from SCM class that we are not extending anymore
private String scmUrl;
private String scmBranch;
private String scmRevisionNumber;
//squash merge commit may be different from pr commit
private String scmMergeEventRevisionNumber;
private String scmCommitLog;
private long scmCommitTimestamp;
private String scmAuthor;
private long numberOfChanges;
// fields added above are from SCM class that we are not extending anymore
@Id
private ObjectId id;
private String orgName;
private String repoName;
private String sourceRepo;
private String sourceBranch;
private String targetRepo;
private String targetBranch;
private String number;
@Indexed
private ObjectId collectorItemId;
private long updatedAt;
private long createdAt;
private long closedAt;
private String state;
private long mergedAt;
private String mergeAuthor;
private String mergeAuthorLDAPDN;
private long timestamp;
private long resolutiontime;
private String userId = null;
private String commentsUrl;
private String reviewCommentsUrl;
private List<Comment> comments;
private List<Review> reviews;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/DashboardType.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Defines the type of {@link Dashboard}.
*/
public enum DashboardType {
Product,
Team;
public static DashboardType fromString(String value){
for(DashboardType dashboardType : values()){
if(dashboardType.toString().equalsIgnoreCase(value)){
return dashboardType;
}
}
throw new IllegalArgumentException(value+" is not a valid DashboardType");
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Pipeline.java
=====================================================
package com.capitalone.dashboard.model;
import com.capitalone.dashboard.util.PipelineUtils;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.util.*;
/**
* Document containing the details of a Pipeline for a TeamDashboardCollectorItem
*/
@Document(collection="pipelines")
public class Pipeline extends BaseModel{
/**
* {@link CollectorItem} teamdashboard collector item id
* */
private ObjectId collectorItemId;
/**
* Map of environment names to EnvironmentStage objects. "Build" and "Commit" are
* treated as environments.
* */
@Field("stages")
private Map<String, EnvironmentStage> environmentStageMap = new HashMap<>();
/**
* not including this in the map above because the enum allows us to
* use ordinals to iterate through pipeline progression
* */
private Set<Build> failedBuilds = new HashSet<>();
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public Map<String, EnvironmentStage> getEnvironmentStageMap() {
return environmentStageMap;
}
public void setEnvironmentStageMap(Map<String, EnvironmentStage> environmentStageMap) {
this.environmentStageMap = environmentStageMap;
}
/**
* Adds a commit to a given environment. Will create a new stage if it doesn't exist.
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/GenericCollectorItem.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotNull;
/**
* A generic structure to hold a generic collector item info for a given tool that only that tool collector can
* decipher. This will be used in creating collector item via API for non-standard tools.
*/
@Document(collection = "generic_collector_items")
public class GenericCollectorItem extends BaseModel {
@NotNull
private String toolName;
@NotNull
private ObjectId collectorId;
@NotNull
private String rawData;
@NotNull
private long creationTime;
private long processTime;
@NotNull
private String source;
private ObjectId relatedCollectorItem; //To build relations if needed
private ObjectId buildId; //if started off by some build - connects to build collection
public ObjectId getBuildId() {
return buildId;
}
public void setBuildId(ObjectId buildId) {
this.buildId = buildId;
}
public ObjectId getRelatedCollectorItem() {
return relatedCollectorItem;
}
public void setRelatedCollectorItem(ObjectId relatedCollectorItem) {
this.relatedCollectorItem = relatedCollectorItem;
}
public long getCreationTime() {
return creationTime;
}
public void setCreationTime(long creationTime) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/UserRole.java
=====================================================
package com.capitalone.dashboard.model;
public enum UserRole {
ROLE_USER,
ROLE_ADMIN,
ROLE_API;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Stage.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.HashSet;
import java.util.Set;
public class Stage {
public Stage(){
}
public Stage(Set<PipelineCommit> commits){
this.commits = commits;
}
/** A collection that includes all commits ever to come into the stage */
private Set<PipelineCommit> commits = new HashSet<>();
public Set<PipelineCommit> getCommits() {
return commits;
}
public void setCommits(Set<PipelineCommit> commits) {
this.commits = commits;
}
public void addCommit(PipelineCommit commit){
this.commits.add(commit);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Team.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents a Tempo Team in JIRA.
*/
@Document(collection="team")
public class Team extends BaseModel {
private ObjectId collectorId;
@Indexed
private String teamId;
@Indexed
private String name;
private String changeDate;
private String assetState;
private String isDeleted;
private boolean enabled;
private String teamType;
private long lastCollected;
@Transient
private Collector collector;
public Collector getCollector() {
return collector;
}
public void setCollector(Collector collector) {
this.collector = collector;
}
public Team(String teamId, String name) {
this.teamId = (teamId != null ? teamId.trim() : "");
this.name = (name != null ? name.trim() : "");
}
public ObjectId getCollectorId() {
return collectorId;
}
public void setCollectorId(ObjectId collectorId) {
this.collectorId = collectorId;
}
public String getTeamId() {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TestCaseStatus.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Denotes the status of a given {@link TestCase}.
*/
public enum TestCaseStatus {
Success, Failure, Skipped, Unknown
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/relation/RelatedCollectorItem.java
=====================================================
package com.capitalone.dashboard.model.relation;
import com.capitalone.dashboard.model.BaseModel;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotNull;
@Document(collection = "related_items")
public class RelatedCollectorItem extends BaseModel{
@NotNull
private ObjectId left;
@NotNull
private ObjectId right;
@NotNull
private String source;
@NotNull
private String reason;
@NotNull
private long creationTime;
public ObjectId getLeft() {
return left;
}
public void setLeft(ObjectId left) {
this.left = left;
}
public ObjectId getRight() {
return right;
}
public void setRight(ObjectId right) {
this.right = right;
}
public long getCreationTime() {
return creationTime;
}
public void setCreationTime(long creationTime) {
this.creationTime = creationTime;
}
public String getSource() {
return source;
}
public void setSource(String source) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/ChangeOrder.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Objects;
@Document(collection="changeorder")
public class ChangeOrder extends BaseModel{
private ObjectId collectorItemId;
private Long timestamp;
private String changeOrderItem;
private String changeID;
private String category;
private String status;
private String approvalStatus;
private String initiatedBy;
private String assignedTo;
private String assignmentGroup;
private String changeCoordinator;
private String coordinatorPhone;
private Long plannedStart;
private Long plannedEnd;
private String reason;
private String phase;
private String riskAssessment;
private String priority;
private Long dateEntered;
private boolean open;
private String backoutDuration;
private Long closeTime;
private String extProjectRef;
private String rFCType2;
private String company;
private String title;
private String subcategory;
private String sLAAgreementID;
private String changeModel;
private String service;
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ");
public ObjectId getCollectorItemId() { return collectorItemId; }
public void setCollectorItemId(ObjectId collectorItemId) { this.collectorItemId = collectorItemId; }
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/FeatureIssueLink.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Represents an issue link of a jira story.
*/
public class FeatureIssueLink {
private String targetIssueKey;
private String targetIssueUri;
private String issueLinkName;
private String issueLinkType;
private String issueLinkDirection;
public String getTargetIssueKey() {
return targetIssueKey;
}
public void setTargetIssueKey(String targetIssueKey) {
this.targetIssueKey = targetIssueKey;
}
public String getTargetIssueUri() {
return targetIssueUri;
}
public void setTargetIssueUri(String targetIssueUri) {
this.targetIssueUri = targetIssueUri;
}
public String getIssueLinkName() {
return issueLinkName;
}
public void setIssueLinkName(String issueLinkName) {
this.issueLinkName = issueLinkName;
}
public String getIssueLinkType() {
return issueLinkType;
}
public void setIssueLinkType(String issueLinkType) {
this.issueLinkType = issueLinkType;
}
public String getIssueLinkDirection() {
return issueLinkDirection;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/PipelineStageType.java
=====================================================
package com.capitalone.dashboard.model;
public enum PipelineStageType {
BUILD, COMMIT, DEPLOY
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TestCaseConditionResult.java
=====================================================
package com.capitalone.dashboard.model;
public class TestCaseConditionResult {
private TestCaseStatus status;
private long duration;
public TestCaseStatus getStatus() {
return status;
}
public void setStatus(TestCaseStatus status) {
this.status = status;
}
public long getDuration() {
return duration;
}
public void setDuration(long duration) {
this.duration = duration;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Review.java
=====================================================
package com.capitalone.dashboard.model;
public class Review {
private String body;
private String state;
private String author;
private String authorLDAPDN;
private long createdAt;
private long updatedAt;
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getAuthorLDAPDN() {
return authorLDAPDN;
}
public void setAuthorLDAPDN(String authorLDAPDN) {
this.authorLDAPDN = authorLDAPDN;
}
public long getCreatedAt() {
return createdAt;
}
public void setCreatedAt(long createdAt) {
this.createdAt = createdAt;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Application.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.mapping.DBRef;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* The software application the team is developing and/or operating. Consists of one or more software
* components and may exist in one or more environments.
*/
public class Application {
private String name;
private String owner;
private String lineOfBusiness;
@DBRef
private List<Component> components = new ArrayList<>();
Application() {
}
public Application(String name, Component... componentsArray) {
this.name = name;
Collections.addAll(components, componentsArray);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String getLineOfBusiness() {
return lineOfBusiness;
}
public void setLineOfBusiness(String lineOfBusiness) {
this.lineOfBusiness = lineOfBusiness;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/ScopeOwner.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents a team in a content management system that works with features.
*
* Possible collectors: VersionOne PivotalTracker Rally Trello Jira
*
* @author kfk884
*
*/
@Document(collection = "scope-owner")
public class ScopeOwner extends CollectorItem {
private ObjectId collectorItemId;
@Indexed
private String teamId;
@Indexed
private String name;
private String changeDate;
private String assetState;
private String isDeleted;
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public String getTeamId() {
return this.teamId;
}
public void setTeamId(String teamId) {
this.teamId = teamId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getChangeDate() {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/PerformanceMetric.java
=====================================================
package com.capitalone.dashboard.model;
public class PerformanceMetric {
private String name;
private Object value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatLevel.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Enumerates the possible statuses.
*/
public enum LibraryPolicyThreatLevel {
Critical, High, Medium, Low, None;
public static LibraryPolicyThreatLevel fromString(String value){
for(LibraryPolicyThreatLevel threatLevel : values()){
if(threatLevel.toString().equalsIgnoreCase(value)){
return threatLevel;
}
}
throw new IllegalArgumentException(value+" is not a valid LibraryPolicyThreatLevel");
}
public static LibraryPolicyThreatLevel fromDouble(double value){
if ((value == 10)) return LibraryPolicyThreatLevel.Critical;
if ((value < 10.0) && (value >= 7.0)) return LibraryPolicyThreatLevel.High;
if ((value < 7.0) && (value >= 4.0)) return LibraryPolicyThreatLevel.Medium;
if ((value < 4.0) && (value > 0.0)) return LibraryPolicyThreatLevel.Low;
if (value == 0.0) return LibraryPolicyThreatLevel.None;
throw new IllegalArgumentException(value+" is not a valid LibraryPolicyThreatLevel");
}
public static LibraryPolicyThreatLevel fromInt(int value){
double dv = (double) value;
return fromDouble(dv);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CodeReposBuilds.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
@Document(collection = "code_repos_builds")
public class CodeReposBuilds extends BaseModel {
@Indexed(unique = true)
private String codeRepo;
private Set<ObjectId> buildCollectorItems = new HashSet<>();
@Indexed
private long timestamp;
public String getCodeRepo() {
return codeRepo.toLowerCase(Locale.US);
}
public void setCodeRepo(String codeRepo) {
this.codeRepo = codeRepo.toLowerCase(Locale.US);
}
public Set<ObjectId> getBuildCollectorItems() {
return buildCollectorItems;
}
public void setBuildCollectorItems(Set<ObjectId> buildCollectorItems) {
this.buildCollectorItems = buildCollectorItems;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/RepoBranch.java
=====================================================
package com.capitalone.dashboard.model;
import javax.validation.constraints.NotNull;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Locale;
public class RepoBranch {
private String url = "";
private String branch = "";
private RepoType type = RepoType.Unknown;
public enum RepoType {
SVN,
GIT,
Unknown;
public static com.capitalone.dashboard.model.RepoBranch.RepoType fromString(String value) {
if (value == null) return RepoType.Unknown;
for (com.capitalone.dashboard.model.RepoBranch.RepoType repoType : values()) {
if (repoType.toString().equalsIgnoreCase(value)) {
return repoType;
}
}
throw new IllegalArgumentException(value + " is not a valid RepoType.");
}
}
public RepoBranch(String url, String branch, RepoType repoType) {
this.url = url;
this.branch = branch;
this.type = repoType;
}
public RepoBranch() {
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url.toLowerCase(Locale.US);
}
public String getBranch() {
switch (this.getType()) {
case GIT: return getGITNormalizedBranch(branch);
case SVN: return branch;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/quality/FindBugsXmlReport.java
=====================================================
package com.capitalone.dashboard.model.quality;
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "BugCollection")
public class FindBugsXmlReport implements CodeQualityVisitee {
@Override
public void accept(CodeQualityVisitor visitor) {
visitor.visit(this);
}
@XmlElement(name = "file")
private List<BugFile> files;
public List<BugFile> getFiles() {
return files;
}
public void setFiles(List<BugFile> files) {
this.files = files;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class BugFile {
@XmlElement(name = "BugInstance")
private List<BugInstance> bugCollection;
public List<BugInstance> getBugCollection() {
return bugCollection;
}
public void setBugCollection(List<BugInstance> bugCollection) {
this.bugCollection = bugCollection;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class BugInstance {
@XmlAttribute
private String type;
@XmlAttribute
private BugPriority priority;
@XmlAttribute
private BugCategory category;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/quality/PmdReport.java
=====================================================
package com.capitalone.dashboard.model.quality;
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlRootElement(name="pmd")
@XmlAccessorType(XmlAccessType.FIELD)
public class PmdReport implements CodeQualityVisitee {
@XmlElement(name="file")
private List<PmdFile> files;
@Override
public void accept(CodeQualityVisitor visitor) {
visitor.visit(this);
}
public List<PmdFile> getFiles() {
return files;
}
public void setFiles(List<PmdFile> files) {
this.files = files;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class PmdFile{
@XmlElement(name="violation")
private List<PmdViolation> violations;
public List<PmdViolation> getViolations() {
return violations;
}
public void setViolations(List<PmdViolation> violations) {
this.violations = violations;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class PmdViolation {
@XmlAttribute(name="priority")
private int priority;
public int getPriority() {
return priority;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/quality/JacocoXmlReport.java
=====================================================
package com.capitalone.dashboard.model.quality;
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "report")
public class JacocoXmlReport implements CodeQualityVisitee{
@XmlElement(name="counter")
private List<Counter> counters;
@Override
public void accept(CodeQualityVisitor visitor) {
visitor.visit(this);
}
public List<Counter> getCounters() {
return counters;
}
public void setCounters(List<Counter> counters) {
this.counters = counters;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class Counter {
@XmlAttribute(name="type")
private CounterType type;
@XmlAttribute(name="missed")
private int missed;
@XmlAttribute(name="covered")
private int covered;
public int getMissed() {
return missed;
}
public void setMissed(int missed) {
this.missed = missed;
}
public int getCovered() {
return covered;
}
public void setCovered(int covered) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/quality/ArtifactType.java
=====================================================
package com.capitalone.dashboard.model.quality;
public enum ArtifactType {
junit, findbugs, jacoco, pmd, checkstyle;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitor.java
=====================================================
package com.capitalone.dashboard.model.quality;
import com.capitalone.dashboard.model.CodeQuality;
public interface CodeQualityVisitor {
CodeQuality produceResult();
void visit(JunitXmlReport junitXmlReport);
void visit(FindBugsXmlReport findBugsXmlReport);
void visit(JacocoXmlReport jacocoXmlReport);
void visit(PmdReport pmdReport);
void visit(CheckstyleReport checkstyleReport);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/quality/CodeQualityVisitee.java
=====================================================
package com.capitalone.dashboard.model.quality;
public interface CodeQualityVisitee {
void accept(CodeQualityVisitor visitor);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/quality/JunitXmlReport.java
=====================================================
package com.capitalone.dashboard.model.quality;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* Contains the results of exexuting a testsuite
* <p>
* <p>Java class for testsuite complex type.
* <p>
* <p>The following schema fragment specifies the expected content contained within this class.
* <p>
* <pre>
* <complexType name="testsuite">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="properties">
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="property" maxOccurs="unbounded" minOccurs="0">
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <attribute name="name" use="required">
* <simpleType>
* <restriction base="{http://www.w3.org/2001/XMLSchema}token">
* <minLength value="1"/>
* </restriction>
* </simpleType>
* </attribute>
* <attribute name="value" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
* </restriction>
* </complexContent>
* </complexType>
* </element>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </element>
* <element name="testcase" maxOccurs="unbounded" minOccurs="0">
* <complexType>
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/quality/CheckstyleReport.java
=====================================================
package com.capitalone.dashboard.model.quality;
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlRootElement(name="checkstyle")
@XmlAccessorType(XmlAccessType.FIELD)
public class CheckstyleReport implements CodeQualityVisitee {
@XmlElement(name="file")
private List<CheckstyleFile> files;
@Override
public void accept(CodeQualityVisitor visitor) {
visitor.visit(this);
}
public List<CheckstyleFile> getFiles() {
return files;
}
public void setFiles(List<CheckstyleFile> files) {
this.files = files;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class CheckstyleFile {
@XmlElement(name="error")
private List<CheckstyleError> errors;
public List<CheckstyleError> getErrors() {
return errors;
}
public void setErrors(List<CheckstyleError> errors) {
this.errors = errors;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class CheckstyleError {
@XmlAttribute(name="severity")
private CheckstyleSeverity severity;
public CheckstyleSeverity getSeverity() {
return severity;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/UserStory.java
=====================================================
package com.capitalone.dashboard.model;
public class UserStory {
private String storyId;
private String storyName;
private String ownerName;
private String storyUrl;
private long lastUpdateDate;
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public long getLastUpdateDate() {
return lastUpdateDate;
}
public void setLastUpdateDate(long lastUpdateDate) {
this.lastUpdateDate = lastUpdateDate;
}
public String getStoryUrl() {
return storyUrl;
}
public void setStoryUrl(String storyUrl) {
this.storyUrl = storyUrl;
}
public String getStoryId() {
return storyId;
}
public void setStoryId(String storyId) {
this.storyId = storyId;
}
public String getStoryName() {
return storyName;
}
public void setStoryName(String storyName) {
this.storyName = storyName;
}
public String getOwnerName() {
return ownerName;
}
public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/StandardWidget.java
=====================================================
package com.capitalone.dashboard.model;
import org.apache.commons.collections.MapUtils;
import org.bson.types.ObjectId;
import java.util.HashMap;
import java.util.Map;
public class StandardWidget {
private CollectorType collectorType;
private static final String REPO = "repo";
private static final String BUILD = "build";
private static final String CODEQUALITY = "codeanalysis";
private static final String FEATURE = "feature";
private static final String DEPLOY = "deploy";
private static final String REPO_ID = "repo0";
private static final String BUILD_ID = "build0";
private static final String CODEQUALITY_ID = "codeanalysis0";
private static final String FEATURE_ID = "feature0";
private static final String DEPLOY_ID = "deploy0";
private Map<String, Object> options = new HashMap<>();
private String name;
private ObjectId componentId;
public StandardWidget(CollectorType collectorType, ObjectId componentId) {
this.collectorType = collectorType;
this.componentId = componentId;
setNameAndId();
}
/**
* Setup the standard name, id etc for the widget
*/
private void setNameAndId() {
switch (collectorType) {
case SCM:
name = REPO;
options.put("id", REPO_ID);
break;
case Build:
name = BUILD;
options.put("id", BUILD_ID);
options.put("buildDurationThreshold", 3);
options.put("consecutiveFailureThreshold", 5);
break;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/BuildStatus.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Enumeration of valid build statuses.
*/
public enum BuildStatus {
Success,
Failure,
Unstable,
Aborted,
InProgress,
Unknown;
public static BuildStatus fromString(String value) {
for (BuildStatus buildStatus : values()) {
if (buildStatus.toString().equalsIgnoreCase(value)) {
return buildStatus;
}
}
throw new IllegalArgumentException(value + " is not a valid BuildStatus.");
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CloudVirtualNetwork.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.hibernate.validator.constraints.NotBlank;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@Document(collection = "cloud_virtual_network")
public class CloudVirtualNetwork extends BaseModel{
@Indexed
@NotNull
@NotBlank
private String virtualNetworkId;
@NotNull
@NotBlank
private String accountNumber;
private ObjectId collectorItemId;
private String cidrBlock;
private boolean defaultNetwork;
private String state; //pending, available etc.
private Map<String, String> tags = new HashMap<>();
private long creationDate;
private long lastUpdateDate;
public String getVirtualNetworkId() {
return virtualNetworkId;
}
public void setVirtualNetworkId(String virtualNetworkId) {
this.virtualNetworkId = virtualNetworkId;
}
public String getCidrBlock() {
return cidrBlock;
}
public void setCidrBlock(String cidrBlock) {
this.cidrBlock = cidrBlock;
}
public boolean isDefaultNetwork() {
return defaultNetwork;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/EnvironmentStage.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Class representing any stage of a {@link Pipeline}
*/
public class EnvironmentStage extends Stage{
/** {@link BinaryArtifact} The last artifact to be processed */
private BinaryArtifact lastArtifact;
public BinaryArtifact getLastArtifact() {
return lastArtifact;
}
public void setLastArtifact(BinaryArtifact lastArtifact) {
this.lastArtifact = lastArtifact;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/RallyBurnDownData.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="rally_burndown")
public class RallyBurnDownData extends BaseModel{
public static final String ITERATION_TO_DO_HOURS = "iterationToDoHours";
public static final String ACCEPTED_POINTS = "acceptedPoints";
public static final String ITERATION_DATE = "iterationDate";
private List<Map<String,String>> burnDownData;
private String iterationId;
private String projectName;
private String iterationName;
private String projectId;
private Double totalEstimate;
private long lastUpdated;
public long getLastUpdated() {
return lastUpdated;
}
public void setLastUpdated(long timestamp) {
this.lastUpdated = timestamp;
}
public List<Map<String, String>> getBurnDownData() {
if(burnDownData==null){
burnDownData = new ArrayList<>();
}
return burnDownData;
}
public void setBurnDownData(List<Map<String, String>> burnDownData) {
this.burnDownData = burnDownData;
}
public String getIterationId() {
return iterationId;
}
public void setIterationId(String iterationId) {
this.iterationId = iterationId;
}
public String getProjectName() {
return projectName;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/PerformanceMetricStatus.java
=====================================================
package com.capitalone.dashboard.model;
public enum PerformanceMetricStatus {
OK, WARNING, CRITICAL
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/LibraryPolicyType.java
=====================================================
package com.capitalone.dashboard.model;
public enum LibraryPolicyType {
Security,
License,
Other;
public static LibraryPolicyType fromString(String value) {
for (LibraryPolicyType policyType : values()) {
if (policyType.toString().equalsIgnoreCase(value)) {
return policyType;
}
}
return Other;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/ScoreDisplayType.java
=====================================================
package com.capitalone.dashboard.model;
public enum ScoreDisplayType {
HEADER,
WIDGET;
public static ScoreDisplayType fromString(String value){
for(ScoreDisplayType scoreDisplay : values()){
if(scoreDisplay.toString().equalsIgnoreCase(value)){
return scoreDisplay;
}
}
return ScoreDisplayType.HEADER;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/RequestLog.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "requests")
public class RequestLog extends BaseModel {
private String client;
private String endpoint;
private String method;
private String parameter;
private long requestSize;
private String requestContentType;
private Object requestBody;
private long responseSize;
private String responseContentType;
private Object responseBody;
private int responseCode;
private long timestamp;
private long responseTime;
public String getClient() {
return client;
}
public void setClient(String client) {
this.client = client;
}
public String getEndpoint() {
return endpoint;
}
public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getParameter() {
return parameter;
}
public void setParameter(String parameter) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Configuration.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.Base64;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "configuration")
public class Configuration extends BaseModel {
private final static String PREFIX = "BASE64:";
public Configuration(String collectorName, Set<Map<String, String>> info) {
super();
this.collectorName = collectorName;
this.info = info;
}
public Set<Map<String, String>> decryptOrEncrptInfo() {
for (Map<String, String> info : info) {
if (!info.isEmpty()) {
String password = info.get("password").toString();
if(password.contains(PREFIX)){
Base64.Decoder decoder = Base64.getDecoder();
password = new String(decoder.decode(password.replaceFirst(PREFIX, "").trim()));
} else {
Base64.Encoder encoder = Base64.getEncoder();
password = PREFIX + encoder.encodeToString(password.getBytes());
}
info.replace("password", password);
}
}
return info;
}
public Configuration() {
}
private String collectorName;
private Set<Map<String, String>> info = new HashSet<>();
public String getCollectorName() {
return collectorName;
}
public void setCollectorName(String collectorName) {
this.collectorName = collectorName;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Collector.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* The collectors that have been registered in the given Dashboard app instance.
*/
@Document(collection = "collectors")
public class Collector extends BaseModel {
private String name;
private CollectorType collectorType;
private boolean enabled;
private boolean online;
private List<CollectionError> errors = new ArrayList<>();
//Every collector will have its own set of required and all fields depending upon the specific tool.
private Map<String, Object> uniqueFields = new HashMap<>();
private Map<String, Object> allFields = new HashMap<>();
private long lastExecuted;
private List<String> searchFields = Arrays.asList("description");
private Map<String, Object> properties = new HashMap<>(); //general purpose name-value properties
public Collector() {
}
public Collector(String name, CollectorType collectorType) {
this.name = name;
this.collectorType = collectorType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public CollectorType getCollectorType() {
return collectorType;
}
public void setCollectorType(CollectorType collectorType) {
this.collectorType = collectorType;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/NameValue.java
=====================================================
package com.capitalone.dashboard.model;
public class NameValue {
private String name;
private String value;
public NameValue () {
}
public NameValue(String name, String value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
NameValue nameValue = (NameValue) o;
if (!name.equals(nameValue.name)) return false;
return value.equals(nameValue.value);
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + value.hashCode();
return result;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CodeQuality.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashSet;
import java.util.Set;
/**
* Represents code quality at a specific point in time. This could include
* a unit test run, a security scan, static analysis, functional tests,
* manual acceptance tests or bug reports.
*
* Possible Collectors:
* Sonar (in scope)
* Fortify
* ALM
* Various build system test results
*
*/
@Document(collection="code_quality")
public class CodeQuality extends BaseModel {
private ObjectId collectorItemId;
private long timestamp;
private String name;
private String url;
private CodeQualityType type;
private String version;
private ObjectId buildId;
private Set<CodeQualityMetric> metrics = new HashSet<>();
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getName() {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CodeQualityMetricStatus.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Enumerates the possible {@link CodeQualityMetric} statuses.
*/
public enum CodeQualityMetricStatus {
Ok, Warning, Alert, Error
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/RallyStoryStages.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.List;
public class RallyStoryStages {
private String backlog;
private String defined;
private String inProgress;
private String completed;
private String accepted;
private String defects;
private List<UserStory> userStories;
public List<UserStory> getUserStories() {
return userStories;
}
public void setUserStories(List<UserStory> userStories) {
this.userStories = userStories;
}
public String getDefects() {
return defects;
}
public void setDefects(String defects) {
this.defects = defects;
}
public String getBacklog() {
return backlog;
}
public void setBacklog(String backlog) {
this.backlog = backlog;
}
public String getDefined() {
return defined;
}
public void setDefined(String defined) {
this.defined = defined;
}
public String getInProgress() {
return inProgress;
}
public void setInProgress(String inProgress) {
this.inProgress = inProgress;
}
public String getCompleted() {
return completed;
}
public void setCompleted(String completed) {
this.completed = completed;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TeamMember.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.List;
/**
* Class representing any team members of a {@link TeamInventory}
*/
public class TeamMember {
private String orgId;
private String allocation;
private String teamId;
private String name;
private List<TeamLevelDetails> teams;
private String regOrTemp ;
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getAllocation() {
return allocation;
}
public void setAllocation(String allocation) {
this.allocation = allocation;
}
public String getTeamId() {
return teamId;
}
public void setTeamId(String teamId) {
this.teamId = teamId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CollectorItem.java
=====================================================
package com.capitalone.dashboard.model;
import org.apache.commons.collections.CollectionUtils;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* <p>
* Represents a unique collection in an external tool. For example, for a CI tool
* the collector item would be a Job. For a project management tool, the collector item
* might be a Scope.
* </p>
* <p>
* Each {@link Collector} is responsible for specifying how it's {@link CollectorItem}s are
* uniquely identified by storing key/value pairs in the options Map. The description field will
* be visible to users in the UI to aid in selecting the correct {@link CollectorItem} for their dashboard.
* Ideally, the description will be unique for a given {@link Collector}.
* </p>
*/
@Document(collection="collector_items")
public class CollectorItem extends BaseModel {
private String description;
private String niceName;
private String environment;
private boolean enabled;
private List<CollectionError> errors = new ArrayList<>();
private boolean pushed;
private ObjectId collectorId;
private long lastUpdated;
private Map<String,Object> options = new HashMap<>();
@Transient
private Collector collector;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TeamLevelDetails.java
=====================================================
package com.capitalone.dashboard.model;
public class TeamLevelDetails extends CollectorItem {
public String getInstanceUrl() {
return (String) getOptions().get("instanceUrl");
}
public void setInstanceUrl(String url) {
getOptions().put("instanceUrl", url);
}
public String getTeamId() {
return (String) getOptions().get("teamId");
}
public void setTeamId(String teamId) {
getOptions().put("teamId", teamId);
}
public String getTeamName() {
return (String) getOptions().get("teamName");
}
public void setTeamName(String teamName) {
getOptions().put("teamName", teamName);
}
public String getUrl() {
return (String) getOptions().get("url");
}
public void setUrl(String url) {
getOptions().put("url", url);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TeamLevelDetails that = (TeamLevelDetails) o;
return getTeamId().equals(that.getTeamId()) && getTeamName().equals(that.getTeamName());
}
@Override
public int hashCode() {
int result = getTeamId().hashCode();
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/LibraryPolicyResult.java
=====================================================
package com.capitalone.dashboard.model;
import org.apache.commons.collections.CollectionUtils;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@Document(collection = "library_policy")
public class LibraryPolicyResult extends BaseModel {
private ObjectId collectorItemId;
private long timestamp;
private long evaluationTimestamp;
private Map<LibraryPolicyType, Set<Threat>> threats = new HashMap<>();
private String reportUrl;
private Integer totalComponentCount;
private Integer knownComponentCount;
private List<PolicyScanMetric> policyAlert = new ArrayList<>();
private ObjectId buildId;
public static class Threat {
LibraryPolicyThreatLevel level;
List<String> components = new ArrayList<>();
int count;
private Map<LibraryPolicyThreatDisposition, Integer> dispositionCounts = new HashMap<>();
public Threat(LibraryPolicyThreatLevel level, int count) {
this.level = level;
this.count = count;
}
public LibraryPolicyThreatLevel getLevel() {
return level;
}
public void setLevel(LibraryPolicyThreatLevel level) {
this.level = level;
}
public int getCount() {
return count;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Performance.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashMap;
import java.util.Map;
@Document(collection="performance")
public class Performance extends BaseModel{
private ObjectId collectorItemId;
private long timestamp;
private String url;
private PerformanceType type;
private String version;
private ObjectId executionId;
private String targetAppName;
private String targetEnvName;
private Map<String,Object> metrics = new HashMap<>();
public Map<String,Object> getMetrics() {
return metrics;
}
public void setMetrics(Map<String,Object> metrics) {
this.metrics = metrics;
}
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Component.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* A self-contained, independently deployable piece of the larger application. Each component of an application
* has a different source repo, build job, deploy job, etc.
*
*/
@Document(collection="components")
public class Component extends BaseModel {
private String name; // must be unique to the application
private String owner;
private Map<CollectorType, List<CollectorItem>> collectorItems = new HashMap<>();
public Component() {
}
public Component(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public Map<CollectorType, List<CollectorItem>> getCollectorItems() {
return collectorItems;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/StoryIndicator.java
=====================================================
package com.capitalone.dashboard.model;
public class StoryIndicator {
private String storyId;
private String storyNumber;
private String storyName;
private String storyStatus;
private String storyState;
private String storyType;
private String epicNumber;
private String epicName;
private String projectName;
private String teamName;
private String sprintName;
public String getStoryId() {
return storyId;
}
public void setStoryId(String storyId) {
this.storyId = storyId;
}
public String getStoryNumber() {
return storyNumber;
}
public void setStoryNumber(String storyNumber) {
this.storyNumber = storyNumber;
}
public String getStoryName() {
return storyName;
}
public void setStoryName(String storyName) {
this.storyName = storyName;
}
public String getStoryStatus() {
return storyStatus;
}
public void setStoryStatus(String storyStatus) {
this.storyStatus = storyStatus;
}
public String getStoryState() {
return storyState;
}
public void setStoryState(String storyState) {
this.storyState = storyState;
}
public String getStoryType() {
return storyType;
}
public void setStoryType(String storyType) {
this.storyType = storyType;
}
public String getEpicNumber() {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/PipelineStage.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.Locale;
public final class PipelineStage {
public static final PipelineStage COMMIT = new PipelineStage("Commit", PipelineStageType.COMMIT);
public static final PipelineStage BUILD = new PipelineStage("Build", PipelineStageType.BUILD);
private final String name;
private final PipelineStageType type;
private PipelineStage(String name, PipelineStageType type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public PipelineStageType getType() {
return type;
}
public static PipelineStage valueOf(String name) {
if (name == null) {
throw new IllegalArgumentException();
}
if (COMMIT.name.equalsIgnoreCase(name)) {
return COMMIT;
} else if (BUILD.name.equalsIgnoreCase(name)) {
return BUILD;
} else {
return new PipelineStage(name, PipelineStageType.DEPLOY);
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.toLowerCase(Locale.getDefault()).hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
return result;
}
@SuppressWarnings("PMD.SimplifyBooleanReturns")
@Override
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Dashboard.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
/**
* A collection of widgets, collectors and application components that represent a software
* project under development and/or in production use.
*
*/
@Document(collection="dashboards")
public class Dashboard extends BaseModel {
private String template;
//NOTE Mongodb treats strings as different if they have different case
@Indexed(unique=true)
private String title;
private List<Widget> widgets = new ArrayList<>();
// multiple owner references for backwards compatibility
// TODO: remove once impacts of breaking change are assessed
private String owner;
private List<Owner> owners = new ArrayList<Owner>();
private DashboardType type;
private Application application;
private String configurationItemBusServName;
private String configurationItemBusAppName;
private boolean validServiceName;
private boolean validAppName;
private boolean remoteCreated;
//Enable/Disable scoring for the dashboard
private boolean scoreEnabled;
//Display position for score.
//Default to HEADER
private ScoreDisplayType scoreDisplay = ScoreDisplayType.HEADER;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/ServiceAccount.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="service_accounts")
public class ServiceAccount extends BaseModel {
private String serviceAccountName;
private String fileNames;
public ServiceAccount(String serviceAccountName, String fileNames) {
this.serviceAccountName = serviceAccountName;
this.fileNames = fileNames;
}
public String getServiceAccountName() {
return serviceAccountName;
}
public void setServiceAccountName(String serviceAccountName) {
this.serviceAccountName = serviceAccountName;
}
public String getFileNames() {
return fileNames;
}
public void setFileNames(String fileNames) {
this.fileNames = fileNames;
}
@Override
public String toString() {
return "ServiceAccount [serviceAccount=" + serviceAccountName + ", fileNames=" + fileNames + "]";
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Commit.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* A specific commit in a version control repository.
*
* Possible collectors:
* Subversion (in scope)
* Git (in scope)
* GitHub
* TFS
* BitBucket
* Unfuddle
*
*/
@Document(collection="commits")
@CompoundIndexes({
@CompoundIndex(name = "unique_scm_key", def = "{'collectorItemId' : 1, 'scmRevisionNumber': 1}")
})
public class Commit extends SCM {
@Id
private ObjectId id;
@Indexed
private ObjectId collectorItemId;
private long timestamp;
private boolean firstEverCommit;
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/PipelineCommit.java
=====================================================
package com.capitalone.dashboard.model;
public class PipelineCommit extends SCM{
public PipelineCommit() {
}
public PipelineCommit(long timestamp) {
this.timestamp = timestamp;
}
public PipelineCommit(SCM scm, long timestamp){
super(scm);
this.timestamp = timestamp;
}
private long timestamp;
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((scmRevisionNumber == null) ? 0 : scmRevisionNumber.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PipelineCommit other = (PipelineCommit) obj;
if (scmRevisionNumber == null) {
if (other.scmRevisionNumber != null)
return false;
} else if (!scmRevisionNumber.equals(other.scmRevisionNumber))
return false;
return true;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TestSuiteType.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Denotes the type of tests in a given {@link TestSuite}.
*/
public enum TestSuiteType {
Unit, Functional, Regression, Performance, Integration, Security, Manual;
public static TestSuiteType fromString(String value) {
for (TestSuiteType type : values()) {
if (type.toString().equalsIgnoreCase(value)) {
return type;
}
}
throw new IllegalArgumentException(value + " is not a valid TestSuiteType.");
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/AuditResult.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashMap;
import java.util.Map;
@Document(collection = "audit_results")
public class AuditResult extends BaseModel {
private ObjectId dashboardId;
private String dashboardTitle;
private String lineOfBusiness;
private String configItemBusServName;
private String configItemBusAppName;
private String configItemBusServOwner;
private String configItemBusAppOwner;
private AuditType auditType;
private String auditTypeStatus;
private String auditStatus;
private String url;
private String auditDetails;
private Map traceability;
private long timestamp;
private Map<String, Object> options = new HashMap<>();
public AuditResult() { }
@SuppressWarnings("PMD.ExcessiveParameterList")
public AuditResult(ObjectId dashboardId, String dashboardTitle, String lineOfBusiness, String configItemBusServName,
String configItemBusAppName, String configItemBusServOwner, String configItemBusAppOwner, AuditType auditType,
String auditTypeStatus, String auditStatus, String auditDetails, String url, Map traceability, long timestamp) {
this.dashboardId = dashboardId;
this.dashboardTitle = dashboardTitle;
this.lineOfBusiness = lineOfBusiness;
this.configItemBusServName = configItemBusServName;
this.configItemBusAppName = configItemBusAppName;
this.configItemBusServOwner = configItemBusServOwner;
this.configItemBusAppOwner = configItemBusAppOwner;
this.auditType = auditType;
this.auditTypeStatus = auditTypeStatus;
this.auditStatus = auditStatus;
this.url = url;
this.auditDetails = auditDetails;
this.traceability = traceability;
this.timestamp = timestamp;
}
@SuppressWarnings("PMD.ExcessiveParameterList")
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CollectorItemConfigHistory.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashMap;
import java.util.Map;
@Document(collection="collitem_cfghist")
public class CollectorItemConfigHistory extends BaseModel {
private ObjectId collectorItemId;
private long timestamp;
private ConfigHistOperationType operation;
private String userName;
private String userID;
private Map<String, Object> changeMap = new HashMap<>();
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public ConfigHistOperationType getOperation() {
return operation;
}
public void setOperation(ConfigHistOperationType operation) {
this.operation = operation;
}
public Map<String, Object> getChangeMap() {
return changeMap;
}
public void setChangeMap(Map<String, Object> changeMap) {
this.changeMap = changeMap;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/PerformanceType.java
=====================================================
package com.capitalone.dashboard.model;
public enum PerformanceType {
ApplicationPerformance(CollectorType.AppPerformance),
InfrastructurePerformance(CollectorType.InfraPerformance);
private final CollectorType collectorType;
PerformanceType(CollectorType collectorType) {
this.collectorType = collectorType;
}
public static PerformanceType fromString(String value) {
for (PerformanceType performanceType : values()) {
if (performanceType.toString().equalsIgnoreCase(value)) {
return performanceType;
}
}
throw new IllegalArgumentException(value + " is not a valid PerformanceType.");
}
public CollectorType collectorType() {
return collectorType;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Authentication.java
=====================================================
package com.capitalone.dashboard.model;
import com.google.common.hash.Hashing;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.nio.charset.StandardCharsets;
/**
* This class serves as the model for storing credential used for login & Signup.
*/
@Document(collection = "authentication")
public class Authentication extends BaseModel {
static final String HASH_PREFIX = "sha512:";
@Indexed(unique = true)
private String username;
private String password;
public Authentication(String username, String password) {
this.username = username;
this.password = hash(password);
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = hash(password);
}
static String hash(String password) {
if (!password.startsWith(HASH_PREFIX)) {
return HASH_PREFIX + Hashing.sha512().hashString(password, StandardCharsets.UTF_8).toString();
}
return password;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CodeQualityType.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Enumerates the possible {@link CodeQuality} types.
*/
public enum CodeQualityType {
StaticAnalysis(CollectorType.CodeQuality),
SecurityAnalysis(CollectorType.StaticSecurityScan);
private final CollectorType collectorType;
CodeQualityType(CollectorType collectorType) {
this.collectorType = collectorType;
}
public static CodeQualityType fromString(String value) {
for (CodeQualityType qualityType : values()) {
if (qualityType.toString().equalsIgnoreCase(value)) {
return qualityType;
}
}
throw new IllegalArgumentException(value + " is not a valid CodeQualityType.");
}
public CollectorType collectorType() {
return collectorType;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CloudInstance.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* Represents an EC2 instance from AWS
*/
@Document(collection = "cloud_instance")
public class CloudInstance extends BaseModel{
@Indexed
private String instanceId;
@Indexed
private String accountNumber;
private String instanceType;
private String imageId;
private long imageExpirationDate;
private boolean imageApproved;
private String instanceOwner;
private boolean isMonitored;
private String privateDns;
private String privateIp;
private String publicDns;
private String publicIp;
private String subnetId;
private String virtualNetworkId;
private int age;
private String status;
private boolean isStopped;
private boolean isTagged;
private double cpuUtilization;
private long lastUpdatedDate;
private List<String> securityGroups = new ArrayList<>();
private List<NameValue> tags = new ArrayList<>();
private double networkIn;
private double networkOut;
private double diskRead;
private double diskWrite;
private String rootDeviceName;
private String autoScaleName;
private String lastAction;
public String getInstanceId() {
return instanceId;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/MaturityModel.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "maturity_model")
public class MaturityModel {
@Indexed
private String profile;
private String rules;
public String getProfile() {
return profile;
}
public void setProfile(String profile) {
this.profile = profile;
}
public String getRules() {
return rules;
}
public void setRules(String rules) {
this.rules = rules;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/ScoreTypeValue.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Score Value with Type Details
*/
public class ScoreTypeValue {
private ScoreType scoreType = ScoreType.value_percent;
private Double scoreValue;
//Propagate the score
private PropagateType propagate = PropagateType.no;
public ScoreTypeValue() {}
public static ScoreTypeValue noScore() {
ScoreTypeValue scoreTypeValue = new ScoreTypeValue();
scoreTypeValue.setScoreType(ScoreType.no_score);
return scoreTypeValue;
}
public static ScoreTypeValue zeroScore() {
ScoreTypeValue scoreTypeValue = new ScoreTypeValue();
scoreTypeValue.setScoreType(ScoreType.zero_score);
return scoreTypeValue;
}
public ScoreTypeValue(Double scoreValue) {
this.scoreValue = scoreValue;
}
public static ScoreTypeValue cloneScoreTypeValue(ScoreTypeValue scoreTypeValue) {
if (null == scoreTypeValue) {
return null;
}
ScoreTypeValue scoreTypeValueClone = new ScoreTypeValue();
scoreTypeValueClone.setScoreType(scoreTypeValue.getScoreType());
scoreTypeValueClone.setScoreValue(scoreTypeValue.getScoreValue());
scoreTypeValueClone.setPropagate(scoreTypeValue.getPropagate());
return scoreTypeValueClone;
}
public ScoreType getScoreType() {
return scoreType;
}
public boolean isNoScore() {
return scoreType == ScoreType.no_score;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/ScoreComponentSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Score Settings for a Component
*/
public class ScoreComponentSettings {
//If component is disabled, this can be set true
private boolean disabled = false;
//Weight for component in score (0-100)
private int weight = 0;
//Score Criterias for component
private ScoreCriteria criteria;
public static ScoreComponentSettings cloneScoreComponentSettings(ScoreComponentSettings scoreComponentSettings) {
if (null == scoreComponentSettings) {
return null;
}
ScoreComponentSettings scoreComponentSettingsClone = new ScoreComponentSettings();
copyScoreComponentSettings(scoreComponentSettings, scoreComponentSettingsClone);
return scoreComponentSettingsClone;
}
public static void copyScoreComponentSettings(ScoreComponentSettings from, ScoreComponentSettings to) {
if (null == from || null == to) {
return;
}
to.setDisabled(from.isDisabled());
to.setWeight(from.getWeight());
ScoreCriteria criteria = from.getCriteria();
if (null == criteria) {
return;
}
to.setCriteria(
ScoreCriteria.cloneScoreCriteria(criteria)
);
}
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
public int getWeight() {
return weight;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/ScoreType.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Score Type
*/
public enum ScoreType {
//When Type is no_score component is not considered for scoring
no_score,
//When Type is zero_score component component score is `0`
zero_score,
//When Type is value_percent component score is a defined value
value_percent
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/ScoreThresholdSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Score Threshold Settings
*/
public class ScoreThresholdSettings {
//Compare with these operators
public enum ComparatorType {
equals,
less,
greater,
less_or_equal,
greater_or_equal
}
//The value can be of type percent for percent of days, Or days for number of days
public enum ValueType {
percent,
days
}
private ComparatorType comparator = ComparatorType.less_or_equal;
private ValueType type = ValueType.percent;
//If the threshold is met set the score
private ScoreTypeValue score;
//Number of days to check for while applying threshold
private Integer numDaysToCheck;
//Value to compare
private Double value;
public static ScoreThresholdSettings cloneScoreThresholdSettings(ScoreThresholdSettings scoreThresholdSettings) {
if (null == scoreThresholdSettings) {
return scoreThresholdSettings;
}
ScoreThresholdSettings scoreThresholdSettingsClone = new ScoreThresholdSettings();
scoreThresholdSettingsClone.setComparator(scoreThresholdSettings.getComparator());
scoreThresholdSettingsClone.setType(scoreThresholdSettings.getType());
scoreThresholdSettingsClone.setValue(scoreThresholdSettings.getValue());
scoreThresholdSettingsClone.setNumDaysToCheck(scoreThresholdSettings.getNumDaysToCheck());
scoreThresholdSettingsClone.setScore(
ScoreTypeValue.cloneScoreTypeValue(scoreThresholdSettings.getScore())
);
return scoreThresholdSettingsClone;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteriaSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.score.ScoreValueType;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "score_criteria_settings")
public class ScoreCriteriaSettings extends BaseModel {
//Max Score
private int maxScore;
//Build Score Settings
private BuildScoreSettings build;
//Quality Score Settings
private QualityScoreSettings quality;
//Deploy Score Settings
private DeployScoreSettings deploy;
//SCM Score Settings
private ScmScoreSettings scm;
//Alert Score Component Settings
private ComponentAlert componentAlert;
//Score can be calculated for types defined in ScoreValueType
private ScoreValueType type = ScoreValueType.DASHBOARD;
//Time when score was calculated
private long timestamp;
public int getMaxScore() {
return maxScore;
}
public void setMaxScore(int maxScore) {
this.maxScore = maxScore;
}
public BuildScoreSettings getBuild() {
return build;
}
public void setBuild(BuildScoreSettings build) {
this.build = build;
}
public QualityScoreSettings getQuality() {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/ScmScoreSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Bean to hold score settings specific to scm
*/
public class ScmScoreSettings extends ScoreComponentSettings {
public static final int SCM_NUM_OF_DAYS = 14;
private ScoreComponentSettings commitsPerDay;
private int numberOfDays = SCM_NUM_OF_DAYS;
public static ScmScoreSettings cloneScmScoreSettings(ScmScoreSettings scmScoreSettings) {
if (null == scmScoreSettings) {
return null;
}
ScmScoreSettings scmScoreSettingsClone = new ScmScoreSettings();
ScoreComponentSettings.copyScoreComponentSettings(scmScoreSettings, scmScoreSettingsClone);
scmScoreSettingsClone.setNumberOfDays(
scmScoreSettings.getNumberOfDays()
);
scmScoreSettingsClone.setCommitsPerDay(
ScoreComponentSettings.cloneScoreComponentSettings(scmScoreSettings.getCommitsPerDay())
);
return scmScoreSettingsClone;
}
public int getNumberOfDays() {
return numberOfDays;
}
public void setNumberOfDays(int numberOfDays) {
this.numberOfDays = numberOfDays;
}
public ScoreComponentSettings getCommitsPerDay() {
return commitsPerDay;
}
public void setCommitsPerDay(ScoreComponentSettings commitsPerDay) {
this.commitsPerDay = commitsPerDay;
}
@Override public String toString() {
return "ScmScoreSettings{" +
"commitsPerDay=" + commitsPerDay +
", numberOfDays=" + numberOfDays +
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/QualityScoreSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Bean to hold score settings specific to quality
*/
public class QualityScoreSettings extends ScoreComponentSettings {
//Settings for Code Coverage
private ScoreComponentSettings codeCoverage;
//Settings for Unit Tests
private ScoreComponentSettings unitTests;
//Settings for Violations
private ViolationsScoreSettings violations;
public static QualityScoreSettings cloneQualityScoreSettings(QualityScoreSettings qualityScoreSettings) {
if (null == qualityScoreSettings) {
return null;
}
QualityScoreSettings qualityScoreSettingsClone = new QualityScoreSettings();
ScoreComponentSettings.copyScoreComponentSettings(qualityScoreSettings, qualityScoreSettingsClone);
qualityScoreSettingsClone.setCodeCoverage(
ScoreComponentSettings.cloneScoreComponentSettings(qualityScoreSettings.getCodeCoverage())
);
qualityScoreSettingsClone.setUnitTests(
ScoreComponentSettings.cloneScoreComponentSettings(qualityScoreSettings.getUnitTests())
);
qualityScoreSettingsClone.setViolations(
ViolationsScoreSettings.cloneViolationsScoreSettings(qualityScoreSettings.getViolations())
);
return qualityScoreSettingsClone;
}
public ScoreComponentSettings getCodeCoverage() {
return codeCoverage;
}
public void setCodeCoverage(ScoreComponentSettings codeCoverage) {
this.codeCoverage = codeCoverage;
}
public ScoreComponentSettings getUnitTests() {
return unitTests;
}
public void setUnitTests(ScoreComponentSettings unitTests) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/BuildScoreSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Bean to hold score settings specific to build
*/
public class BuildScoreSettings extends ScoreComponentSettings {
public static final long BUILD_DURATION_THRESHOLD_MILLIS = 300000;
public static final int BUILD_STATUS_NUM_OF_DAYS = 14;
//Settings for Build Threshold Duration
private BuildDurationScoreSettings duration;
//Settings for Build Status
private ScoreComponentSettings status;
//Number Of Days to calculate build score
private int numberOfDays = BUILD_STATUS_NUM_OF_DAYS;
public static BuildScoreSettings cloneBuildScoreSettings(BuildScoreSettings buildScoreSettings) {
if (null == buildScoreSettings) {
return null;
}
BuildScoreSettings buildScoreSettingsClone = new BuildScoreSettings();
ScoreComponentSettings.copyScoreComponentSettings(buildScoreSettings, buildScoreSettingsClone);
buildScoreSettingsClone.setNumberOfDays(buildScoreSettings.getNumberOfDays());
buildScoreSettingsClone.setStatus(
ScoreComponentSettings.cloneScoreComponentSettings(buildScoreSettings.getStatus())
);
buildScoreSettingsClone.setDuration(
BuildDurationScoreSettings.cloneBuildDurationScoreSettings(buildScoreSettings.getDuration())
);
return buildScoreSettingsClone;
}
public int getNumberOfDays() {
return numberOfDays;
}
public void setNumberOfDays(int numberOfDays) {
this.numberOfDays = numberOfDays;
}
public BuildDurationScoreSettings getDuration() {
return duration;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/PropagateType.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
public enum PropagateType {
no(1),
widget(2),
dashboard(3);
private final int value;
private PropagateType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/DeployScoreSettings.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Bean to hold score settings specific to deploy
*/
public class DeployScoreSettings extends ScoreComponentSettings {
//Settings for Deploy Success Instances
private ScoreComponentSettings deploySuccess;
//Settings for Instances Online
private ScoreComponentSettings intancesOnline;
public static DeployScoreSettings cloneDeployScoreSettings(DeployScoreSettings deployScoreSettings) {
if (null == deployScoreSettings) {
return null;
}
DeployScoreSettings deployScoreSettingsClone = new DeployScoreSettings();
ScoreComponentSettings.copyScoreComponentSettings(deployScoreSettings, deployScoreSettingsClone);
deployScoreSettingsClone.setDeploySuccess(
ScoreComponentSettings.cloneScoreComponentSettings(deployScoreSettings.getDeploySuccess())
);
deployScoreSettingsClone.setIntancesOnline(
ScoreComponentSettings.cloneScoreComponentSettings(deployScoreSettings.getIntancesOnline())
);
return deployScoreSettingsClone;
}
public ScoreComponentSettings getDeploySuccess() {
return deploySuccess;
}
public void setDeploySuccess(ScoreComponentSettings deploySuccess) {
this.deploySuccess = deploySuccess;
}
public ScoreComponentSettings getIntancesOnline() {
return intancesOnline;
}
public void setIntancesOnline(ScoreComponentSettings intancesOnline) {
this.intancesOnline = intancesOnline;
}
@Override public String toString() {
return "DeployScoreSettings{" +
"deploySuccess=" + deploySuccess +
", intancesOnline=" + intancesOnline +
", disabled=" + isDisabled() +
", weight=" + getWeight() +
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/ComponentAlert.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
/**
* Alert Settings for Scoring component
*/
public class ComponentAlert {
private ScoreThresholdSettings.ComparatorType comparator = ScoreThresholdSettings.ComparatorType.less_or_equal;
//Value to compare
private Double value;
public static ComponentAlert cloneComponentAlert(ComponentAlert componentAlert) {
if (null == componentAlert) {
return null;
}
ComponentAlert componentAlertClone = new ComponentAlert();
componentAlertClone.setComparator(componentAlert.getComparator());
componentAlertClone.setValue(componentAlert.getValue());
return componentAlertClone;
}
public ScoreThresholdSettings.ComparatorType getComparator() {
return comparator;
}
public void setComparator(ScoreThresholdSettings.ComparatorType comparator) {
this.comparator = comparator;
}
public Double getValue() {
return value;
}
public void setValue(Double value) {
this.value = value;
}
@Override public String toString() {
return "WidgetAlert{" +
"comparator=" + comparator +
", value=" + value +
'}';
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/settings/ScoreCriteria.java
=====================================================
package com.capitalone.dashboard.model.score.settings;
import org.apache.commons.collections.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* Score Criteria
* Criteria Conditions
* - No Widget Found
* - No Data Found in Widget
* Threshold Settings for data
*/
public class ScoreCriteria {
//Score when no widget is found
private ScoreTypeValue noWidgetFound;
//Score when no data is found in widget
private ScoreTypeValue noDataFound;
//List of threshold conditions
private List<ScoreThresholdSettings> dataRangeThresholds;
public static ScoreCriteria cloneScoreCriteria(ScoreCriteria scoreCriteria) {
if (null == scoreCriteria) {
return null;
}
ScoreCriteria scoreCriteriaClone = new ScoreCriteria();
scoreCriteriaClone.setNoDataFound(
ScoreTypeValue.cloneScoreTypeValue(scoreCriteria.getNoDataFound())
);
scoreCriteriaClone.setNoWidgetFound(
ScoreTypeValue.cloneScoreTypeValue(scoreCriteria.getNoWidgetFound())
);
List<ScoreThresholdSettings> dataRangeThresholds = scoreCriteria.getDataRangeThresholds();
if (CollectionUtils.isEmpty(dataRangeThresholds)) {
return scoreCriteriaClone;
}
List<ScoreThresholdSettings> dataRangeThresholdsClone = new ArrayList<>();
for (ScoreThresholdSettings dataRangeThreshold : dataRangeThresholds) {
dataRangeThresholdsClone.add(
ScoreThresholdSettings.cloneScoreThresholdSettings(dataRangeThreshold)
);
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/ScoreCollectorItem.java
=====================================================
package com.capitalone.dashboard.model.score;
import com.capitalone.dashboard.model.CollectorItem;
import org.bson.types.ObjectId;
public class ScoreCollectorItem extends CollectorItem {
private static final String DASHBOARD_ID = "dashboardId";
public ObjectId getDashboardId() {
return (ObjectId) getOptions().get(DASHBOARD_ID);
}
public void setDashboardId(ObjectId dashboardId) {
getOptions().put(DASHBOARD_ID, dashboardId);
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
ScoreCollectorItem that = (ScoreCollectorItem) o;
return getDashboardId().equals(that.getDashboardId());
}
@Override
public int hashCode() {
int result = getDashboardId().hashCode();
return result;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/ScoreValueType.java
=====================================================
package com.capitalone.dashboard.model.score;
/*
Score Type for calculating scores
*/
public enum ScoreValueType {
DASHBOARD;
public static ScoreValueType fromString(String value) {
for (ScoreValueType scoreValueType : values()) {
if (scoreValueType.toString().equalsIgnoreCase(value)) {
return scoreValueType;
}
}
throw new IllegalArgumentException(value + " is not a valid ScoreValueType.");
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetric.java
=====================================================
package com.capitalone.dashboard.model.score;
import java.util.List;
/*
Score for a component like widget
*/
public class ScoreComponentMetric extends ScoreComponentMetricBase {
//Individual components within a component, with scores for them
private List<ScoreComponentMetricBase> children;
public List<ScoreComponentMetricBase> getChildren() {
return children;
}
public void setChildren(List<ScoreComponentMetricBase> children) {
this.children = children;
}
@Override public String toString() {
return "ScoreComponentMetric{" +
"score='" + getScore() + '\'' +
", total='" + getTotal() + '\'' +
", weight='" + getWeight() + '\'' +
", refId='" + getRefId() + '\'' +
", displayId='" + getDisplayId() + '\'' +
", displayName='" + getDisplayName() + '\'' +
", message='" + getMessage() + '\'' +
", propagate='" + getPropagate() + '\'' +
", state='" + getState() + '\'' +
", noScore=" + isNoScore() +
", children=" + children + '\'' +
", options=" + getOptions() + '\'' +
", alert='" + isAlert() +
'}';
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/ScoreComponentMetricBase.java
=====================================================
package com.capitalone.dashboard.model.score;
import com.google.common.collect.Maps;
import org.bson.types.ObjectId;
import java.util.Map;
public class ScoreComponentMetricBase {
//Score for the widget/component
private String score;
//Score total
private String total;
//Weight in percent for a widget/component
private String weight;
//Reference Id. When score is for type Dashboard, value is Widget Id
private ObjectId refId;
//Unique display id for widget/component
private String displayId;
//Display name for the widget/component
private String displayName;
//Propagate type value for widget/component
private String propagate;
//Status of score calculation
private String state;
//If widget/component has no score, flag is true
private boolean noScore;
//Alert is true if there is message to alert
private boolean alert = false;
//Message to display
private String message;
//Additional options to save data
public Map<String, Object> options = Maps.newHashMap();
public Map<String, Object> getOptions() {
return options;
}
public String getScore() {
return score;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/score/ScoreMetric.java
=====================================================
package com.capitalone.dashboard.model.score;
import com.capitalone.dashboard.model.BaseModel;
import com.google.common.collect.Maps;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Collection;
import java.util.Map;
/*
Collection for scores based on type dashboard/team
*/
@Document(collection = "score_metric")
public class ScoreMetric extends BaseModel {
//Collector Item Id for score
private ObjectId collectorItemId;
//Id for score type as Dashboard/Team
//If type is DASHBOARD, value should be id of dashboard
private ObjectId scoreTypeId;
//Score can be calculated for types defined in ScoreValueType
private ScoreValueType type = ScoreValueType.DASHBOARD;
//Time when score was calculated
private long timestamp;
//Score value
private String score;
//Score total
private String total;
//Failure message
private String failureMssg;
//If the dashboard has no score, the flag is set as true
private boolean noScore;
//Options to save additional properties
public Map<String, String> options = Maps.newHashMap();
//Collection of scores for individual components (widgets for dashboard score)
private Collection<ScoreComponentMetric> componentMetrics;
public Map<String, String> getOptions() {
return options;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/UserInfo.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.Collection;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
import com.google.common.collect.Sets;
@Document(collection="user_info")
@CompoundIndexes({
@CompoundIndex(name = "username_authType", def = "{'username' : 1, 'authType': 1}")
})
public class UserInfo {
@Id
private ObjectId id;
private String username;
private Collection<UserRole> authorities;
private AuthType authType;
private String firstName;
private String middleName;
private String lastName;
private String displayName;
private String emailAddress;
public UserInfo() {
authorities = Sets.newHashSet();
}
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Collection<UserRole> getAuthorities() {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/PolicyScanMetric.java
=====================================================
package com.capitalone.dashboard.model;
public class PolicyScanMetric {
private Integer policycriticalCount;
private Integer policysevereCount;
private Integer polimoderateCount;
private Integer policyAffectedCount;
public Integer getPolicyAffectedCount() {
return policyAffectedCount;
}
public void setPolicyAffectedCount(Integer policyAffectedCount) {
this.policyAffectedCount = policyAffectedCount;
}
public Integer getPolicycriticalCount() {
return policycriticalCount;
}
public void setPolicycriticalCount(Integer policycriticalCount) {
this.policycriticalCount = policycriticalCount;
}
public Integer getPolicysevereCount() {
return policysevereCount;
}
public void setPolicysevereCount(Integer policysevereCount) {
this.policysevereCount = policysevereCount;
}
public Integer getPolimoderateCount() {
return polimoderateCount;
}
public void setPolimoderateCount(Integer polimoderateCount) {
this.polimoderateCount = polimoderateCount;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Cmdb.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Objects;
@Document(collection="cmdb")
public class Cmdb extends BaseModel{
private ObjectId collectorItemId;
private long timestamp;
/**
* configurationItem unique system generated id
*/
@NotNull
private String configurationItem;
/**
* configurationItemSubType SubType of the CI
*/
private String configurationItemSubType;
/**
* configurationItemType Type of the CI
*/
private String configurationItemType;
private String assignmentGroup;
/**
* A owner assigned to the CI usually the id associated with the owner when provided
*/
private String appServiceOwner;
/**
* A owner assigned to the CI usually the id associated with the owner when provided
*/
private String businessOwner;
/**
* A owner assigned to the CI usually the id associated with the owner when provided
*/
private String supportOwner;
/**
* A owner assigned to the CI usually the id associated with the owner when provided
*/
private String developmentOwner;
/**
* A owner assigned to the CI usually the fullName of the owner when provided
*/
private String appServiceOwnerUserName;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Comment.java
=====================================================
package com.capitalone.dashboard.model;
public class Comment {
private String user;
private String userLDAPDN;
private long createdAt;
private long updatedAt;
private String body;
private String status;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getUserLDAPDN() {
return userLDAPDN;
}
public void setUserLDAPDN(String userLDAPDN) {
this.userLDAPDN = userLDAPDN;
}
public long getCreatedAt() {
return createdAt;
}
public void setCreatedAt(long createdAt) {
this.createdAt = createdAt;
}
public long getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(long updatedAt) {
this.updatedAt = updatedAt;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/EnvironmentComponent.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents deployable units (components) deployed to an environment.
*/
@Document(collection = "environment_components")
public class EnvironmentComponent extends BaseModel {
/**
* Deploy collectorItemId
*/
private ObjectId collectorItemId;
private String environmentID;
private String environmentName;
private String environmentUrl;
private String componentID;
private String componentName;
private String componentVersion;
private String jobUrl;
private boolean deployed;
private long deployTime;
private long asOfDate;
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public String getEnvironmentID() {
return environmentID;
}
public void setEnvironmentID(String environmentID) {
this.environmentID = environmentID;
}
public String getEnvironmentName() {
return environmentName;
}
public void setEnvironmentName(String environmentName) {
this.environmentName = environmentName;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Service.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashSet;
import java.util.Set;
/**
* A product or service offered by an Application.
*/
@Document(collection="services")
public class Service extends BaseModel {
private String name;
private String url;
private String applicationName;
private ObjectId dashboardId;
private ServiceStatus status;
private String message;
private long lastUpdated;
private Set<ObjectId> dependedBy = new HashSet<>();
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public ObjectId getDashboardId() {
return dashboardId;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CloudInstanceHistory.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents an EC2 instance from AWS
*/
@Document(collection = "cloud_instance_history")
public class CloudInstanceHistory extends BaseModel{
@Indexed
private String accountNumber;
@Indexed
private long time;
private int total;
private int nonTagged;
private int stopped;
private int expiredImage;
private double estimatedCharge;
private double cpu;
private double diskRead;
private double diskWrite;
private double networkIn;
private double networkOut;
private String currency = "USD";
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Monitor2.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
/*
Represents the getters and setters for the Aws Server Status object.
*/
@Document(collection = "monitor2")
public class Monitor2 extends BaseModel {
private String name;
private String url;
private int status;
private ObjectId dashboardId;
private long lastUpdated;
private String applicationName;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() { return this.url; }
public void setUrl(String url) { this.url = url; }
public int getStatus() { return this.status; }
public void setStatus(int status) { this.status = status; }
public ObjectId getDashboardId() {
return dashboardId;
}
public void setDashboardId(ObjectId dashboardId) {
this.dashboardId = dashboardId;
}
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public long getLastUpdated() {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/ConfigHistOperationType.java
=====================================================
package com.capitalone.dashboard.model;
public enum ConfigHistOperationType {
CREATED,
CHANGED,
RENAMED,
DELETED;
public static ConfigHistOperationType fromString(String value) {
for (ConfigHistOperationType opType : values()) {
if (opType.toString().equalsIgnoreCase(value)) {
return opType;
}
}
throw new IllegalArgumentException(value + " is not a valid operation Type");
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/SprintEstimate.java
=====================================================
package com.capitalone.dashboard.model;
public class SprintEstimate {
private int openEstimate;
private int inProgressEstimate;
private int completeEstimate;
private int totalEstimate;
/**
* @return the openEstimate
*/
public int getOpenEstimate() {
return openEstimate;
}
/**
* @param openEstimate the openEstimate to set
*/
public void setOpenEstimate(int openEstimate) {
this.openEstimate = openEstimate;
}
/**
* @return the inProgressEstimate
*/
public int getInProgressEstimate() {
return inProgressEstimate;
}
/**
* @param inProgressEstimate the inProgressEstimate to set
*/
public void setInProgressEstimate(int inProgressEstimate) {
this.inProgressEstimate = inProgressEstimate;
}
/**
* @return the completeEstimate
*/
public int getCompleteEstimate() {
return completeEstimate;
}
/**
* @param completeEstimate the completeEstimate to set
*/
public void setCompleteEstimate(int completeEstimate) {
this.completeEstimate = completeEstimate;
}
/**
* @return the totalEstimate
*/
public int getTotalEstimate() {
return totalEstimate;
}
/**
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CommitStatus.java
=====================================================
package com.capitalone.dashboard.model;
public class CommitStatus {
private String state;
private String context;
private String author;
private String authorLDAPDN;
private String description;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getAuthorLDAPDN() {
return authorLDAPDN;
}
public void setAuthorLDAPDN(String authorLDAPDN) {
this.authorLDAPDN = authorLDAPDN;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/ServiceStatus.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Denotes the status of a product or service
*/
public enum ServiceStatus {
Ok(200, 200),
Warning(300, 400),
Unauth(401, 401),
Alert(0, 999);
private int low;
private int high;
private ServiceStatus(int low, int high) {
this.low = low;
this.high = high;
}
public static ServiceStatus fromString(String value) {
for(ServiceStatus status : ServiceStatus.values()) {
if (status.toString().equalsIgnoreCase(value)) {
return status;
}
}
throw new IllegalArgumentException(value + " is not a valid ServiceStatus.");
}
public static ServiceStatus getServiceStatus(int statusCode) {
for(ServiceStatus status : ServiceStatus.values()) {
if(status.low <= statusCode && status.high >= statusCode) {
return status;
}
}
return Alert;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CloudSubNetwork.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Document(collection = "cloud_subnetwork")
public class CloudSubNetwork extends BaseModel{
@Indexed
private String subnetId;
private String accountNumber;
private String virtualNetworkId;
private String cidrBlock;
private int cidrCount;
private String zone;
private int availableIPCount;
private int subscribedIPCount;
private int usedIPCount;
private boolean defaultForZone;
private String state;
private long creationDate;
private long lastUpdateDate;
private List<NameValue> tags = new ArrayList<>();
private Map<String, Integer> ipUsage;
private Map<String, Integer> subscribedIPUsage;
public Map<String, Integer> getIpUsage() {
return ipUsage;
}
public void setIpUsage(Map<String, Integer> ipUsage) {
this.ipUsage = ipUsage;
}
public String getSubnetId() {
return subnetId;
}
public void setSubnetId(String subnetId) {
this.subnetId = subnetId;
}
public String getVirtualNetworkId() {
return virtualNetworkId;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CloudVolumeStorage.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
@Document(collection = "cloud_volume")
public class CloudVolumeStorage extends BaseModel{
@Indexed
private String volumeId;
@Indexed
private String accountNumber;
private String status;
private long creationDate;
private int size;
private List<NameValue> tags = new ArrayList<>();
private boolean encrypted;
private String type;
private String zone;
private List<String> attachInstances = new ArrayList<>();
public String getVolumeId() {
return volumeId;
}
public void setVolumeId(String volumeId) {
this.volumeId = volumeId;
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Owner.java
=====================================================
package com.capitalone.dashboard.model;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
public class Owner {
private String username;
private AuthType authType;
public Owner() {}
public Owner(String username, AuthType authType) {
this.username = username;
this.authType = authType;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public AuthType getAuthType() {
return authType;
}
public void setAuthType(AuthType authType) {
this.authType = authType;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
Owner rhs = (Owner) obj;
return new EqualsBuilder().append(username, rhs.username).append(authType, rhs.authType).isEquals();
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/AuditType.java
=====================================================
package com.capitalone.dashboard.model;
public enum AuditType {
ALL,
CODE_REVIEW,
BUILD_REVIEW,
CODE_QUALITY,
STATIC_SECURITY_ANALYSIS,
LIBRARY_POLICY,
TEST_RESULT,
PERF_TEST,
ARTIFACT;
public static AuditType fromString(String value) {
for (AuditType auditType : values()) {
if (auditType.toString().equalsIgnoreCase(value)) {
return auditType;
}
}
throw new IllegalArgumentException(value + " is not a Audit Type");
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/EnvironmentStatus.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents the status (online/offline) of a server for a given component and environment.
*/
@Document(collection = "environment_status")
public class EnvironmentStatus extends BaseModel {
private ObjectId collectorItemId;
private String componentID;
private String environmentName;
private String componentName;
private String resourceName;
private String parentAgentName;
private boolean online;
public ObjectId getCollectorItemId() {
return collectorItemId;
}
public void setCollectorItemId(ObjectId collectorItemId) {
this.collectorItemId = collectorItemId;
}
public String getComponentID() {
return componentID;
}
public void setComponentID(String componentID) {
this.componentID = componentID;
}
public String getEnvironmentName() {
return environmentName;
}
public void setEnvironmentName(String environmentName) {
this.environmentName = environmentName;
}
public String getComponentName() {
return componentName;
}
public void setComponentName(String componentName) {
this.componentName = componentName;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TestCaseCondition.java
=====================================================
package com.capitalone.dashboard.model;
public class TestCaseCondition {
private String condition;
private TestCaseConditionResult result;
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public TestCaseConditionResult getResult() {
return result;
}
public void setResult(TestCaseStatus status, long duration) {
TestCaseConditionResult result = new TestCaseConditionResult();
result.setDuration(duration);
result.setStatus(status);
this.result = result;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CollectorType.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Enumerates the possible {@link Collector} types.
*/
public enum CollectorType {
SCM,
CMDB,
Incident,
Build,
Artifact,
Deployment,
AgileTool,
@Deprecated
Feature,
TestResult,
@Deprecated
ScopeOwner,
@Deprecated
Scope,
CodeQuality,
Test,
StaticSecurityScan,
LibraryPolicy,
ChatOps,
Cloud,
Product,
AppPerformance,
InfraPerformance,
Score,
TEAM,
Audit;
public static CollectorType fromString(String value) {
for (CollectorType collectorType : values()) {
if (collectorType.toString().equalsIgnoreCase(value)) {
return collectorType;
}
}
throw new IllegalArgumentException(value + " is not a CollectorType");
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/ApiToken.java
=====================================================
package com.capitalone.dashboard.model;
import com.google.common.hash.Hashing;
import org.springframework.data.mongodb.core.mapping.Document;
import java.nio.charset.StandardCharsets;
@Document(collection="apitoken")
public class ApiToken extends BaseModel {
static final String HASH_PREFIX = "sha512:";
private String apiUser;
private String apiKey;
private Long expirationDt;
public ApiToken(String apiUser, String apiKey, Long expirationDt) {
this.apiUser = apiUser;
this.apiKey = hash(apiKey);
this.expirationDt = expirationDt;
}
public String getApiUser() {
return apiUser;
}
public void setApiUser(String apiUser) {
this.apiUser = apiUser;
}
public String getApiKey() {
return apiKey;
}
public void setApiKey(String apiKey) {
this.apiKey = hash(apiKey);
}
public Long getExpirationDt() {
return expirationDt;
}
public void setExpirationDt(Long expirationDt) {
this.expirationDt = expirationDt;
}
static String hash(String apiKey) {
if (!apiKey.startsWith(HASH_PREFIX)) {
return HASH_PREFIX + Hashing.sha512().hashString(apiKey, StandardCharsets.UTF_8).toString();
}
return apiKey;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/AuthType.java
=====================================================
package com.capitalone.dashboard.model;
public enum AuthType {
STANDARD,
LDAP,
APIKEY;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Template.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
/**
* A collection of templates represent a software
* project under development and/or in production use.
*/
@Document(collection = "templates")
public class Template extends BaseModel {
@Indexed(unique = true)
private String template;
private List<String> widgets = new ArrayList<>();
private List<String> order = new ArrayList<>();
public Template(String template, List<String> widgets, List<String> order) {
this.template = template;
this.widgets = widgets;
this.order = order;
}
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
this.template = template;
}
public List<String> getWidgets() {
return widgets;
}
public void setWidgets(List<String> widgets) {
this.widgets = widgets;
}
public List<String> getOrder() {
return order;
}
public void setOrder(List<String> order) {
this.order = order;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CommitType.java
=====================================================
package com.capitalone.dashboard.model;
public enum CommitType {
NotBuilt, //maven release commits that are not built
Merge, //github merge commits that dont show up in build change set
New;
public static CommitType fromString(String value) {
for (CommitType commitType : values()) {
if (commitType.toString().equalsIgnoreCase(value)) {
return commitType;
}
}
throw new IllegalArgumentException(value + " is not a valid Commit Type");
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Incident.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Objects;
@Document(collection="incident")
public class Incident extends BaseModel {
private ObjectId collectorItemId;
private Long timestamp;
private String incidentItem;
private String incidentID;
private String category;
private Long openTime;
private String openedBy;
private String severity;
private Long updatedTime;
private String primaryAssignmentGroup;
private String status;
private Long closedTime;
private String closedBy;
private String closureCode;
private String affectedItem;
private String incidentDescription;
private String incidentSysID;
private String affectedItemType;
private String affectedItemSysId;
private String affectedBusinessServiceItem;
private String affectedBusinessServiceItemType;
private String affectedBusinessServiceItemSysId;
private boolean attachedToBusinessServiceOrEnvironmentOnly;
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ");
public ObjectId getCollectorItemId() { return collectorItemId; }
public void setCollectorItemId(ObjectId collectorItemId) { this.collectorItemId = collectorItemId; }
public long getTimestamp() { return timestamp; }
public void setTimestamp(long timestamp) { this.timestamp = timestamp; }
public void setTimestamp(String timestamp) { this.timestamp = DATE_FORMATTER.parseMillis(timestamp); }
public String getIncidentItem() { return incidentItem; }
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/BinaryArtifact.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Binary artifacts produced by build jobs and stored in an artifact repository.
*
* Possible collectors:
* Nexus (in scope)
* Artifactory
* npm
* nuget
* rubygems
*
*/
@Document(collection = "artifacts")
public class BinaryArtifact extends BaseModel {
// list of known metadata properties
// Note: these may be hard coded in other modules and external tools
private static final String METADATA_BUILD_URL = "buildUrl";
private static final String METADATA_BUILD_NUMBER = "buildNumber";
private static final String METADATA_JOB_URL = "jobUrl";
private static final String METADATA_JOB_NAME = "jobName";
private static final String METADATA_INSTANCE_URL = "instanceUrl";
private static final String METADATA_SCM_URL = "scmUrl";
private static final String METADATA_SCM_BRANCH = "scmBranch";
private static final String METADATA_SCM_REVISION_NUMBER = "scmRevisionNumber";
/**
* CollectorItemId for the {@link Build} that produced the artifact
*/
private ObjectId collectorItemId;
private long timestamp;
private String canonicalName;
private String artifactGroupId;
private String artifactModule;
private String artifactVersion;
private String artifactName;
private String artifactClassifier;
private String artifactExtension;
private String type;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/SCM.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.List;
import java.util.Objects;
/**
* Base class to represent the details of a change in a source code management
* system.
*/
public class SCM {
protected String scmUrl;
protected String scmBranch; // For SCM that don't have branch in the url
protected String scmRevisionNumber;
protected String scmCommitLog;
protected String scmAuthor;
protected String scmAuthorLogin;
protected String scmAuthorLDAPDN;
protected String scmCommitter;
protected String scmCommitterLogin;
protected List<String> scmParentRevisionNumbers;
protected long scmCommitTimestamp;
protected long numberOfChanges;
protected CommitType type;
protected String pullNumber;
protected List<String> filesAdded;
protected List<String> filesRemoved;
protected List<String> filesModified;
public SCM(){
}
public SCM(SCM scm) {
this.scmUrl = scm.scmUrl;
this.scmBranch = scm.scmBranch;
this.scmRevisionNumber = scm.scmRevisionNumber;
this.scmCommitLog = scm.scmCommitLog;
this.scmAuthor = scm.scmAuthor;
this.scmAuthorLogin = scm.scmAuthorLogin;
this.scmParentRevisionNumbers = scm.scmParentRevisionNumbers;
this.scmCommitTimestamp = scm.scmCommitTimestamp;
this.numberOfChanges = scm.numberOfChanges;
this.type = scm.type;
this.filesAdded = scm.filesAdded;
this.filesRemoved = scm.filesRemoved;
this.filesModified = scm.filesModified;
}
@SuppressWarnings({"PMD.ExcessiveParameterList"})
public SCM(String scmUrl, String scmBranch, String scmRevisionNumber, String scmCommitLog, String scmAuthor, String scmAuthorLogin, List<String> scmParentRevisionNumbers, long scmCommitTimestamp, long numberOfChanges, CommitType type) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TestCapability.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.ArrayList;
import java.util.Collection;
public class TestCapability {
/**
* Creation timestamp
*/
private long timestamp;
/**
* Identifies this test result in the source system
*/
private String executionId;
/**
* Description of the test result that might make sense to a human
*/
private String description;
/**
* Optional URL to test results
*/
private String url;
/**
* Start test execution time {@link java.util.Date#getTime()}
*/
private long startTime;
/**
* End test execution time {@link java.util.Date#getTime()}
*/
private long endTime;
/**
* Test duration in milliseconds
*/
private long duration;
/**
* Count of test cases that failed in all test suites
*/
private int failedTestSuiteCount;
/**
* Count of test cases that generated an error in all test suites
*/
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/KeyValueLog.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class KeyValueLog {
private static final char SEPERATOR = ' ';
private static final char EQUALS = '=';
private static final char QUOTE = '"';
private StringBuilder builder = new StringBuilder();
private Map<String, Object> attributes = new LinkedHashMap<>();
public KeyValueLog with(String key, Object value) {
attributes.put(key, value);
return this;
}
@Override
public String toString() {
Set<String> keySet = attributes.keySet();
for(String key : keySet) {
builder.append(key).append(EQUALS).append(QUOTE).append(attributes.get(key)).append(QUOTE).append(SEPERATOR);
}
return builder.toString().trim();
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CollectionError.java
=====================================================
package com.capitalone.dashboard.model;
public class CollectionError {
private String errorCode;
private String errorMessage;
private long timestamp;
public static final String UNKNOWN_HOST = "Unreachable";
public CollectionError(String errorCode, String errorMessage) {
this.errorCode = errorCode;
this.errorMessage = errorMessage;
this.timestamp = System.currentTimeMillis();
}
public String getErrorCode() {
return errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
public long getTimestamp() {
return timestamp;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/RallyFeature.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents the rally metrics data for a particular iteration with remaining days calculated
* by start date and end date.
*/
@Document(collection = "rally_feature")
public class RallyFeature extends BaseModel {
private long timestamp;
private Object endDate;
private int remainingDays;
private Object startDate;
private long lastUpdated;
private ObjectId collectorItemId;
private String plannedVelocity;
private String state;
private String taskActualTotal;
private String taskEstimateTotal;
private String taskRemainingTotal;
private String projectId;
private String projectName;
private String planEstimate;
private static final String INSTANCE_URL = "instanceUrl";
private static final String ITERATION_NAME = "iterationName";
private static final String ITERATION_ID = "iterationId";
private String userListCount;
private String lastExecuted;
private Map<String, Object> options = new HashMap<>();
private Set<RallyStoryStages> storyStages = new HashSet<>();
public Object getStartDate() {
return startDate;
}
public void setStartDate(Object startDate) {
this.startDate = startDate;
}
public int getRemainingDays() {
return remainingDays;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/Widget.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import java.util.HashMap;
import java.util.Map;
/**
* Represents a widget on the dashboard. Each widget is associated with a specific component. The id, name and options
* should be provided by the UI.
*/
public class Widget {
private ObjectId id;
private String name;
private ObjectId componentId;
private Map<String,Object> options = new HashMap<>();
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ObjectId getComponentId() {
return componentId;
}
public void setComponentId(ObjectId componentId) {
this.componentId = componentId;
}
public Map<String, Object> getOptions() {
return options;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TestResult.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Collection;
/**
* Represents a collection of test suites that have been executed. This may include
* a unit test run, a security scan, static analysis, functional tests,
* manual acceptance tests or bug reports.
*
* Possible Collectors:
* Hudson (in scope)
* ALM
* Various build system test results
*
*/
@Document(collection="test_results")
@CompoundIndexes({
@CompoundIndex(name = "test_results_collItemId_ts_idx", def = "{'collectorItemId' : 1, 'timestamp': -1}")
})
public class TestResult extends BaseModel {
/**
* ID of {@link CollectorItem}
*/
private ObjectId collectorItemId;
/**
* Creation timestamp
*/
private long timestamp;
/**
* Identifies this test result in the source system
*/
private String executionId;
//Object ID of the build event - if say build happens via Jenkins
private ObjectId buildId;
/**
* Description of the test result that might make sense to a human
*/
private String description;
/**
* Optional URL to test results
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TeamInventory.java
=====================================================
package com.capitalone.dashboard.model;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
@Document(collection="teamInventory")
public class TeamInventory extends BaseModel {
private ObjectId collectorId;
private ObjectId collectorItemId;
@Indexed
private String teamId;
private String name;
private String lob;
private List<TeamMember> teamMembers;
private long timestamp;
@Transient
private Collector collector;
public Collector getCollector() {
return collector;
}
public void setCollector(Collector collector) {
this.collector = collector;
}
public TeamInventory(String teamId, String name) {
this.teamId = (teamId != null ? teamId.trim() : "");
this.name = (name != null ? name.trim() : "");
}
public ObjectId getCollectorId() {
return collectorId;
}
public void setCollectorId(ObjectId collectorId) {
this.collectorId = collectorId;
}
public String getTeamId() {
return teamId;
}
public void setTeamId(String teamId) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/CodeQualityMetric.java
=====================================================
package com.capitalone.dashboard.model;
/**
* Represents a {@link CodeQuality} metric. Each metric should have a unique name property.
*/
public class CodeQualityMetric {
private String name;
private String value;
private String formattedValue;
private CodeQualityMetricStatus status;
private String statusMessage;
public CodeQualityMetric(String name) {
this.name = name;
}
public CodeQualityMetric() {}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
public String getFormattedValue() {
return formattedValue;
}
public void setFormattedValue(String formattedValue) {
this.formattedValue = formattedValue;
}
public CodeQualityMetricStatus getStatus() {
return status;
}
public void setStatus(CodeQualityMetricStatus status) {
this.status = status;
}
public String getStatusMessage() {
return statusMessage;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/ScopeOwnerCollectorItem.java
=====================================================
package com.capitalone.dashboard.model;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.springframework.data.mongodb.core.index.Indexed;
/**
* Collector implementation for Feature that stores system configuration
* settings required for source system data connection (e.g., API tokens, etc.)
*
* @author KFK884
*/
public class ScopeOwnerCollectorItem extends CollectorItem {
@Indexed
private static final String TEAM_ID = "teamId";
@Indexed
private static final String PROJECT_ID = "projectId";
private static final String CHANGE_DATE = "changeDate";
private static final String ASSET_STATE = "assetState";
private static final String IS_DELETED = "isDeleted";
public String getTeamId() {
return (String) getOptions().get(TEAM_ID);
}
public void setTeamId(String teamId) {
getOptions().put(TEAM_ID, teamId);
}
public String getProjectId() {
return (String) getOptions().get(PROJECT_ID);
}
public void setProjectId(String projectId) {
getOptions().put(PROJECT_ID, projectId);
}
public String getName() {
return getDescription();
}
public void setName(String name) {
setDescription(name);
}
public String getChangeDate() {
return (String) getOptions().get(CHANGE_DATE);
}
public void setChangeDate(String changeDate) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TestCase.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
* An individual test case in a {@link TestSuite}.
*/
public class TestCase {
/**
* Identifies this test case in the source system
*/
private String id;
/**
* Description of the test case that might make sense to a human
*/
private String description;
private long duration;
private int totalTestStepCount;
/**
* Count of test cases that failed
*/
private int failedTestStepCount;
/**
* Count of test cases that generated an error
*/
private int successTestStepCount;
/**
* Count of test cases that were skipped
*/
private int skippedTestStepCount;
private int unknownStatusTestStepCount;
/**
* Status of the test case
*/
private TestCaseStatus status = TestCaseStatus.Unknown;
private Collection<TestCaseStep> testSteps = new ArrayList<>();
private Set<String> tags = new HashSet<>();
/**
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/LibraryPolicyThreatDisposition.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.Arrays;
public enum LibraryPolicyThreatDisposition {
Open,
Closed,
FalsePositive,
WillNotFix,
NotUsed,
Challenged,
ReviewRequested,
Unknown;
public static LibraryPolicyThreatDisposition fromString(String value) {
return Arrays.stream(values())
.filter(disposition -> disposition.toString()
.equalsIgnoreCase(value))
.findFirst().orElse(Unknown);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/ArtifactIdentifier.java
=====================================================
package com.capitalone.dashboard.model;
@SuppressWarnings("PMD.NPathComplexity")
public class ArtifactIdentifier {
private final String group;
private final String name;
private final String version;
private final String classifier;
private final String extension;
public ArtifactIdentifier(String group, String name, String version, String classifier, String extension) {
super();
this.group = group;
this.name = name;
this.version = version;
this.classifier = classifier;
this.extension = extension;
}
/**
* @return the group
*/
public String getGroup() {
return group;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @return the version
*/
public String getVersion() {
return version;
}
/**
* @return the classifier
*/
public String getClassifier() {
return classifier;
}
/**
* @return the extension
*/
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/FeatureStatus.java
=====================================================
package com.capitalone.dashboard.model;
public enum FeatureStatus {
BACKLOG("Backlog"), GROOMING("Grooming"), WAITING("Waiting"), IN_PROGRESS("In Progress"), IMPEDED(
"Impeded"), DONE("Done"), ACCEPTED("Accepted");
private String status;
FeatureStatus(String status) {
this.status = status;
}
public String getStatus() {
return this.status;
}
@Override
public String toString() {
return this.status;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/package-info.java
=====================================================
package com.capitalone.dashboard.model;
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/NameValueCount.java
=====================================================
package com.capitalone.dashboard.model;
public class NameValueCount {
private NameValue keyValue;
private int count;
public NameValueCount(NameValue keyValue, int count) {
this.keyValue = keyValue;
this.count = count;
}
public NameValue getKeyValue() {
return keyValue;
}
public void setKeyValue(NameValue keyValue) {
this.keyValue = keyValue;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/FeatureHistory.java
=====================================================
package com.capitalone.dashboard.model;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Represents a trending history of features (story/requirement) from a content management system.
*
* Possible collectors: VersionOne PivotalTracker Rally Trello Jira
*
* @author kfk884
*
*/
@Document(collection = "feature-history")
public class FeatureHistory extends BaseModel {
/*
* Sprint data
*/
@Indexed
private String sprintID;
private String sprintBeginDate;
private String sprintEndDate;
/*
* Scope data
*/
@Indexed
private String projectID;
/*
* ScopeOwner data
*/
@Indexed
private String teamID;
/*
* Story data
*/
private String sStatus;
private String sEstimate;
private String sToDo;
private String sAssetState;
private String sSoftwareTesting;
private String isDeleted;
@Indexed
private String changeDate;
private String reportedDate;
@Indexed
private String storyID;
public String getStoryID() {
return storyID;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/TestSuite.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.ArrayList;
import java.util.Collection;
/**
* A collection of {@link TestCase}s of a particular {@link TestSuiteType}.
*/
public class TestSuite {
private String id;
/**
* Description of the test suite that might make sense to a human
*/
private String description;
/**
* Type of test
*/
private TestSuiteType type;
/**
* Start test suite execution time {@link java.util.Date#getTime()}
*/
private long startTime;
/**
* End test suite execution time {@link java.util.Date#getTime()}
*/
private long endTime;
/**
* Test suite duration in milliseconds
*/
private long duration;
private int totalTestCaseCount;
/**
* Count of test cases that failed
*/
private int failedTestCaseCount;
/**
* Count of test cases that generated an error
*/
private int successTestCaseCount;
/**
* Count of test cases that were skipped
*/
=====================================================
== File: src/main/java/com/capitalone/dashboard/model/FortifyScanReport.java
=====================================================
package com.capitalone.dashboard.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "fortify_report")
@CompoundIndexes(value = { @CompoundIndex(name = "project_id", def = "{'projectId' : 1, 'collectorItemId': 1}") })
public class FortifyScanReport extends BaseModel {
private ObjectId collectorItemId;
private long timestamp;
private String name;
private String url;
private long projectId;
private String version;
private Map<String, Threat> threats = new HashMap<>();
public static class Threat {
List<String> components = new ArrayList<>();
int count;
public Threat(int count) {
this.count = count;
}
public Threat() {
// TODO Auto-generated constructor stub
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List<String> getComponents() {
return components;
}
public void setComponents(List<String> components) {
this.components = components;
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/CloudVirtualNetworkListRefreshRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
public class CloudVirtualNetworkListRefreshRequest {
@NotNull
private String accountNumber;
@NotNull
private List<String> virtualNetworkIds;
private Date refreshDate;
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public List<String> getVirtualNetworkIds() {
return virtualNetworkIds;
}
public void setVirtualNetworkIds(List<String> virtualNetworkIds) {
this.virtualNetworkIds = virtualNetworkIds;
}
public Date getRefreshDate() {
return refreshDate;
}
public void setRefreshDate(Date refreshDate) {
this.refreshDate = refreshDate;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/CodeQualityCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.CodeQualityMetric;
import com.capitalone.dashboard.model.CodeQualityType;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
public class CodeQualityCreateRequest {
private String hygieiaId;
@NotNull
private long timestamp;
@NotNull
private String projectName;
@NotNull
private String projectId;
@NotNull
private String projectUrl;
@NotNull
private String serverUrl;
@NotNull
private CodeQualityType type;
@NotNull
private String projectVersion;
private String toolName;
private String niceName;
private List<CodeQualityMetric> metrics = new ArrayList<>();
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public CodeQualityType getType() {
return type;
}
public void setType(CodeQualityType type) {
this.type = type;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/GitRequestCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.SCM;
public class GitRequestCreateRequest extends SCM {
private String hygieiaId;
private long timestamp;
public String getHygieiaId() {
return hygieiaId;
}
public void setHygieiaId(String hygieiaId) {
this.hygieiaId = hygieiaId;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/DeployDataCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
public class DeployDataCreateRequest {
@NotNull
private String executionId;
@NotNull
private String jobUrl;
@NotNull
private String appName;
@NotNull
private String envName;
@NotNull
private String artifactName;
@NotNull
private String artifactVersion;
@NotNull
private String jobName;
@NotNull
private String instanceUrl;
@NotNull
private String deployStatus;
@NotNull
private long startTime;
private String artifactGroup;
private String hygieiaId;
private long endTime;
private long duration;
private String startedBy;
private String collectorName;
private String niceName;
public String getExecutionId() {
return executionId;
}
public void setExecutionId(String executionId) {
this.executionId = executionId;
}
public String getJobUrl() {
return jobUrl;
}
public void setJobUrl(String jobUrl) {
this.jobUrl = jobUrl;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/TestDataCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.TestCapability;
import com.capitalone.dashboard.model.TestSuite;
import com.capitalone.dashboard.model.TestSuiteType;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.Collection;
public class TestDataCreateRequest {
/**
* ID of job
*/
@NotNull
private String testJobId;
@NotNull
private String testJobName;
@NotNull
private String serverUrl;
/**
* Optional URL to test results
*/
@NotNull
private String testJobUrl;
/**
* Identifies this test result in the source system
*/
@NotNull
private String executionId;
private String niceName;
/**
* Creation timestamp
*/
private long timestamp;
/**
* Description of the test result that might make sense to a human
*/
private String description;
/**
* Start test execution time {@link java.util.Date#getTime()}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/PerformanceCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.PerformanceType;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.Map;
public class PerformanceCreateRequest {
private String hygieiaId;
@NotNull
private long timestamp;
@NotNull
private String projectName;
@NotNull
private String projectId;
@NotNull
private String projectUrl;
@NotNull
private String serverUrl;
@NotNull
private PerformanceType type;
@NotNull
private String projectVersion;
@NotNull
private String collectorName;
private String niceName;
private String targetAppName;
private String targetEnvName;
private Map<String,Object> metrics = new HashMap<>();
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public PerformanceType getType() {
return type;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/CloudInstanceCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.NameValue;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
public class CloudInstanceCreateRequest {
@NotNull
private String instanceId;
@NotNull
private String accountNumber;
private String instanceType;
private String imageId;
private String imageExpirationDate;
private String imageApproved;
private String instanceOwner;
private String isMonitored;
private String privateDns;
private String privateIp;
private String publicDns;
private String publicIp;
private String subnetId;
private String virtualNetworkId;
private String age;
private String isEncrypted;
private String status;
private String isStopped;
private String isTagged;
private String cpuUtilization;
private String lastUpdatedDate;
private List<String> securityGroups = new ArrayList<>();
private List<NameValue> tags = new ArrayList<>();
private String networkIn;
private String networkOut;
private String diskRead;
private String diskWrite;
private String rootDeviceName;
private String lastAction;
private String autoScaleName;
public String getInstanceId() {
return instanceId;
}
public void setInstanceId(String instanceId) {
this.instanceId = instanceId;
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/CloudSubnetListRefreshRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
public class CloudSubnetListRefreshRequest {
@NotNull
private String accountNumber;
@NotNull
private List<String> subnetIds;
private Date refreshDate;
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public List<String> getSubnetIds() {
return subnetIds;
}
public void setSubnetIds(List<String> subnetIds) {
this.subnetIds = subnetIds;
}
public Date getRefreshDate() {
return refreshDate;
}
public void setRefreshDate(Date refreshDate) {
this.refreshDate = refreshDate;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/CloudVolumeCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.NameValue;
import org.springframework.data.mongodb.core.index.Indexed;
import java.util.ArrayList;
import java.util.List;
public class CloudVolumeCreateRequest {
@Indexed
private String volumeId;
@Indexed
private String accountNumber;
private String status;
private long creationDate;
private int size;
private List<NameValue> tags = new ArrayList<>();
private boolean encrypted;
private String type;
private String zone;
private List<String> attchInstances = new ArrayList<>();
public String getVolumeId() {
return volumeId;
}
public void setVolumeId(String volumeId) {
this.volumeId = volumeId;
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public long getCreationDate() {
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/GenericCollectorItemCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
/**
* A request to create a Generic Collector Item.
*
*/
public class GenericCollectorItemCreateRequest {
private String buildId;
@NotNull
private String relatedCollectorItemId;
@NotNull
private String toolName;
@NotNull
private String rawData;
@NotNull
private String source;
public String getBuildId() {
return buildId;
}
public void setBuildId(String buildId) {
this.buildId = buildId;
}
public String getToolName() {
return toolName;
}
public void setToolName(String toolName) {
this.toolName = toolName;
}
public String getRawData() {
return rawData;
}
public void setRawData(String rawData) {
this.rawData = rawData;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/CloudSubnetCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.NameValue;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class CloudSubnetCreateRequest {
@NotNull
private String subnetId;
private String accountNumber;
private String virtualNetworkId;
private String cidrBlock;
private String cidrCount;
private String zone;
private String availableIPCount;
private String subscribedIPCount;
private String usedIPCount;
private String defaultForZone;
private String state;
private String creationDate;
private String lastUpdateDate;
private List<NameValue> tags = new ArrayList<>();
private Map<String, Integer> ipUsage;
private Map<String, Integer> subscribedIPUsage;
public String getSubnetId() {
return subnetId;
}
public void setSubnetId(String subnetId) {
this.subnetId = subnetId;
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public String getVirtualNetworkId() {
return virtualNetworkId;
}
public void setVirtualNetworkId(String virtualNetworkId) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/PerfTestDataCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.TestCapability;
import com.capitalone.dashboard.model.TestSuite;
import com.capitalone.dashboard.model.TestSuiteType;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.Collection;
public class PerfTestDataCreateRequest {
/**
* perf test runID should be unique for each execution.
*/
@NotNull
private String runId;
/**
* Provide a test name, a new testname will create a new collector Item
*/
@NotNull
private String testName;
/**
* Provide a platform name, a new platformName will create a new collector Item. default should be Jmeter.
*/
@NotNull
private String perfTool;
/**
* Type of test should be performance
*/
@NotNull
private TestSuiteType type;
/**
* Provide the test result status
*/
private String resultStatus;
/**
* Provide a report URL if available
*/
private String reportUrl;
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/BinaryArtifactCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.SCM;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* A request to create a BinaryArtifact.
*
*/
public class BinaryArtifactCreateRequest {
@NotNull
private String artifactName;
@NotNull
String canonicalName;
@NotNull
private String artifactGroup;
@NotNull
private String artifactVersion;
private String artifactModule;
private String artifactClassifier;
private String artifactExtension;
// May be null if comes in from rest call outside of jenkins
private String buildId;
private long timestamp;
// Used by the jenkins plugin
// May be null if comes in from rest call outside of jenkins
private List<SCM> sourceChangeSet = new ArrayList<>();
// See usage of metadata in BinaryArtifactServiceImpl for defined property names
private Map<String, Object> metadata = new HashMap<>();
public String getArtifactName() {
return artifactName;
}
public String getCanonicalName() {
return canonicalName;
}
public void setCanonicalName(String canonicalName) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/ConfigurationCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.capitalone.dashboard.model.Configuration;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class ConfigurationCreateRequest {
private String collectorName;
private Set<Map<String,String>> info = new HashSet<>();
public String getCollectorName() {
return collectorName;
}
public void setCollectorName(String collectorName) {
this.collectorName = collectorName;
}
public Set<Map<String, String>> getInfo() {
return info;
}
public void setInfo(Set<Map<String, String>> info) {
this.info = info;
}
public Configuration toConfiguration() {
return new Configuration(collectorName,info);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/Monitor2DataCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
public class Monitor2DataCreateRequest {
@NotNull
private String name;
private String url;
private int status;
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
public String getUrl() { return this.url; }
public void setUrl(String url) { this.url = url; }
public int getStatus() { return this.status; }
public void setStatus(int status) { this.status = status; }
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/CommitCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.SCM;
public class CommitCreateRequest extends SCM {
private String hygieiaId;
private long timestamp;
public String getHygieiaId() {
return hygieiaId;
}
public void setHygieiaId(String hygieiaId) {
this.hygieiaId = hygieiaId;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/CloudInstanceListRefreshRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
public class CloudInstanceListRefreshRequest {
@NotNull
private String accountNumber;
@NotNull
private List<String> instanceIds;
private Date refreshDate;
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public List<String> getInstanceIds() {
return instanceIds;
}
public void setInstanceIds(List<String> instanceIds) {
this.instanceIds = instanceIds;
}
public Date getRefreshDate() {
return refreshDate;
}
public void setRefreshDate(Date refreshDate) {
this.refreshDate = refreshDate;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/CloudVolumeListRefreshRequest.java
=====================================================
package com.capitalone.dashboard.request;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
public class CloudVolumeListRefreshRequest {
@NotNull
private String accountNumber;
@NotNull
private List<String> volumeIds;
private Date refreshDate;
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public List<String> getVolumeIds() {
return volumeIds;
}
public void setVolumeIds(List<String> volumeIds) {
this.volumeIds = volumeIds;
}
public Date getRefreshDate() {
return refreshDate;
}
public void setRefreshDate(Date refreshDate) {
this.refreshDate = refreshDate;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/request/BuildDataCreateRequest.java
=====================================================
package com.capitalone.dashboard.request;
import com.capitalone.dashboard.model.RepoBranch;
import com.capitalone.dashboard.model.SCM;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
public class BuildDataCreateRequest {
@NotNull
private String number;
@NotNull
private String buildUrl;
@NotNull
private String jobName;
@NotNull
private String buildStatus;
@NotNull
private long startTime;
@NotNull
private String jobUrl;
@NotNull
private String instanceUrl;
private String niceName;
private long endTime;
private long duration;
private String startedBy;
private String log;
private List<RepoBranch> codeRepos = new ArrayList<>();
private List<SCM> sourceChangeSet = new ArrayList<>();
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getBuildUrl() {
return buildUrl;
}
public void setBuildUrl(String buildUrl) {
this.buildUrl = buildUrl;
=====================================================
== File: src/main/java/com/capitalone/dashboard/event/DashboardEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.DashboardType;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.mongodb.DBObject;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
import org.springframework.data.mongodb.core.mapping.event.AfterDeleteEvent;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import org.springframework.stereotype.Component;
/**
* Listens for Dashboard lifecycle events to create and delete Product collector CollectorItems
* whenever a Team Dashboard is created or deleted.
*/
@Component
public class DashboardEventListener extends AbstractMongoEventListener<Dashboard> {
private final CollectorRepository collectorRepository;
private final CollectorItemRepository collectorItemRepository;
@Autowired
public DashboardEventListener(CollectorRepository collectorRepository,
CollectorItemRepository collectorItemRepository) {
this.collectorRepository = collectorRepository;
this.collectorItemRepository = collectorItemRepository;
}
/**
* Creates a collector item for new team dashboards
* @param event
*/
@Override
public void onAfterSave(AfterSaveEvent<Dashboard> event) {
Dashboard dashboard = event.getSource();
// Ignore product dashboards
if (DashboardType.Product.equals(dashboard.getType())) {
return;
}
Collector productCollector = getProductCollector();
CollectorItem item = getDashboardCollectorItem(dashboard.getId().toString(), productCollector.getId());
if (item == null) {
// Create a new Collector Item
=====================================================
== File: src/main/java/com/capitalone/dashboard/event/HygieiaMongoEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.EnvironmentStage;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
import java.util.List;
public abstract class HygieiaMongoEventListener<T> extends AbstractMongoEventListener<T> {
protected final CollectorItemRepository collectorItemRepository;
protected final PipelineRepository pipelineRepository;
protected final CollectorRepository collectorRepository;
public HygieiaMongoEventListener(CollectorItemRepository collectorItemRepository,
PipelineRepository pipelineRepository,
CollectorRepository collectorRepository) {
this.collectorItemRepository = collectorItemRepository;
this.pipelineRepository = pipelineRepository;
this.collectorRepository = collectorRepository;
}
private Collector getProductCollector(){
List<Collector> productCollectors = collectorRepository.findByCollectorType(CollectorType.Product);
if(productCollectors.isEmpty()){
return null;
}
return productCollectors.get(0);
}
/**
* Finds the team dashboard collectoritem by dashboard id and product collectorid
* @param teamDashboard
* @return
*/
protected CollectorItem getTeamDashboardCollectorItem(Dashboard teamDashboard) {
ObjectId productCollectorId = getProductCollector().getId();
ObjectId dashboardId = teamDashboard.getId();
return collectorItemRepository.findTeamDashboardCollectorItemsByCollectorIdAndDashboardId(productCollectorId, dashboardId.toString());
}
/**
=====================================================
== File: src/main/java/com/capitalone/dashboard/event/CodeQualityEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.event.sync.SyncDashboard;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
@org.springframework.stereotype.Component
public class CodeQualityEventListener extends HygieiaMongoEventListener<CodeQuality> {
private final SyncDashboard syncDashboard;
@Autowired
public CodeQualityEventListener(
CollectorItemRepository collectorItemRepository,
PipelineRepository pipelineRepository,
CollectorRepository collectorRepository, SyncDashboard syncDashboard) {
super(collectorItemRepository, pipelineRepository, collectorRepository);
this.syncDashboard = syncDashboard;
}
@Override
public void onAfterSave(AfterSaveEvent<CodeQuality> event) {
CodeQuality codeQuality = event.getSource();
syncDashboard.sync(codeQuality);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/event/BuildEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.event.sync.SyncDashboard;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.BuildStatus;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineCommit;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.SCM;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.CommitRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.capitalone.dashboard.util.PipelineUtils.isMoveCommitToBuild;
import static com.capitalone.dashboard.util.PipelineUtils.processPreviousFailedBuilds;
@org.springframework.stereotype.Component
public class BuildEventListener extends HygieiaMongoEventListener<Build> {
private final DashboardRepository dashboardRepository;
private final ComponentRepository componentRepository;
private final CommitRepository commitRepository;
private final SyncDashboard syncDashboard;
@Autowired
public BuildEventListener(DashboardRepository dashboardRepository,
CollectorItemRepository collectorItemRepository,
ComponentRepository componentRepository,
PipelineRepository pipelineRepository,
CollectorRepository collectorRepository, CommitRepository commitRepository, SyncDashboard syncDashboard) {
super(collectorItemRepository, pipelineRepository, collectorRepository);
this.dashboardRepository = dashboardRepository;
this.componentRepository = componentRepository;
this.commitRepository = commitRepository;
this.syncDashboard = syncDashboard;
=====================================================
== File: src/main/java/com/capitalone/dashboard/event/RelatedCollectorItemEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.event.sync.SyncDashboard;
import com.capitalone.dashboard.event.sync.SyncException;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
@org.springframework.stereotype.Component
public class RelatedCollectorItemEventListener extends HygieiaMongoEventListener<RelatedCollectorItem> {
private static final Log LOG = LogFactory.getLog(RelatedCollectorItemEventListener.class);
private final SyncDashboard syncDashboard;
@Autowired
public RelatedCollectorItemEventListener(
CollectorItemRepository collectorItemRepository,
PipelineRepository pipelineRepository,
CollectorRepository collectorRepository, SyncDashboard syncDashboard) {
super(collectorItemRepository, pipelineRepository, collectorRepository);
this.syncDashboard = syncDashboard;
}
@Override
public void onAfterSave(AfterSaveEvent<RelatedCollectorItem> event) {
RelatedCollectorItem relatedCollectorItem = event.getSource();
try {
syncDashboard.sync(relatedCollectorItem);
} catch (SyncException e) {
LOG.error("Error processing related collector item. ID = " + relatedCollectorItem.getId() + ". Reason " + e.getMessage());
}
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/event/EnvironmentComponentEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.BinaryArtifact;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.EnvironmentComponent;
import com.capitalone.dashboard.model.EnvironmentStage;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineCommit;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.model.SCM;
import com.capitalone.dashboard.repository.BinaryArtifactRepository;
import com.capitalone.dashboard.repository.BuildRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.CommitRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.JobRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import com.capitalone.dashboard.util.PipelineUtils;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.bson.types.ObjectId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@org.springframework.stereotype.Component
public class EnvironmentComponentEventListener extends HygieiaMongoEventListener<EnvironmentComponent> {
private static final Logger LOGGER = LoggerFactory.getLogger(EnvironmentComponentEventListener.class);
private final DashboardRepository dashboardRepository;
private final ComponentRepository componentRepository;
private final BinaryArtifactRepository binaryArtifactRepository;
private final BuildRepository buildRepository;
=====================================================
== File: src/main/java/com/capitalone/dashboard/event/sync/SyncException.java
=====================================================
package com.capitalone.dashboard.event.sync;
public class SyncException extends Exception{
public SyncException(String message) {
super(message);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/event/sync/SyncDashboard.java
=====================================================
package com.capitalone.dashboard.event.sync;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.Build;
import com.capitalone.dashboard.model.CodeQuality;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.RepoBranch;
import com.capitalone.dashboard.model.StandardWidget;
import com.capitalone.dashboard.model.Widget;
import com.capitalone.dashboard.model.relation.RelatedCollectorItem;
import com.capitalone.dashboard.repository.BuildRepository;
import com.capitalone.dashboard.repository.CodeQualityRepository;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.RelatedCollectorItemRepository;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.collections4.CollectionUtils;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@org.springframework.stereotype.Component
public class SyncDashboard {
private final DashboardRepository dashboardRepository;
private final ComponentRepository componentRepository;
private final CollectorRepository collectorRepository;
private final CollectorItemRepository collectorItemRepository;
private final BuildRepository buildRepository;
private final RelatedCollectorItemRepository relatedCollectorItemRepository;
private final CodeQualityRepository codeQualityRepository;
private static final String BUILD_REPO_REASON = "Code Repo build";
private static final String CODEQUALITY_TRIGGERED_REASON = "Code scan triggered by build";
@Autowired
public SyncDashboard(DashboardRepository dashboardRepository, ComponentRepository componentRepository,
CollectorRepository collectorRepository, CollectorItemRepository collectorItemRepository,
=====================================================
== File: src/main/java/com/capitalone/dashboard/event/TestResultEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.TestResult;
import com.capitalone.dashboard.model.TestCapability;
import com.capitalone.dashboard.model.TestSuiteType;
import com.capitalone.dashboard.model.TestCase;
import com.capitalone.dashboard.model.TestCaseStatus;
import com.capitalone.dashboard.model.Collector;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Performance;
import com.capitalone.dashboard.model.PerformanceType;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.PerformanceRepository;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.bson.types.ObjectId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.concurrent.TimeUnit;
import java.util.Map;
import java.util.Optional;
@Component
public class TestResultEventListener extends AbstractMongoEventListener<TestResult> {
private static final Logger LOGGER = LoggerFactory.getLogger(TestResultEventListener.class);
private static final String STR_RESP_TIME_THRESHOLD = "KPI : Avg response times";
private static final String STR_ACTUAL_RESP_TIME = "Actual Response Time";
private static final String STR_TARGET_RESP_TIME = "Target Response Time";
private static final String STR_TXN_PER_SEC_THRESHOLD = "KPI : Transaction Per Second";
private static final String STR_ACTUAL_TXN_PER_SEC = "Actual Transactions per sec";
private static final String STR_TARGET_TXN_PER_SEC = "Target Transactions per sec";
private static final String STR_ERROR_RATE_THRESHOLD = "KPI : Error Rate Threshold";
private static final String STR_ACTUAL_ERROR_RATE = "Actual Error Rate";
private static final String STR_TARGET_ERROR_RATE = "Target Error Rate";
private static final String STR_CRITICAL = "CRITICAL";
private static final String STR_OPEN = "OPEN";
private static final String COLLECTOR_NAME = "PerfTools";
=====================================================
== File: src/main/java/com/capitalone/dashboard/event/CommitEventListener.java
=====================================================
package com.capitalone.dashboard.event;
import com.capitalone.dashboard.model.BaseModel;
import com.capitalone.dashboard.model.CollectorItem;
import com.capitalone.dashboard.model.CollectorType;
import com.capitalone.dashboard.model.Commit;
import com.capitalone.dashboard.model.CommitType;
import com.capitalone.dashboard.model.Component;
import com.capitalone.dashboard.model.Dashboard;
import com.capitalone.dashboard.model.Pipeline;
import com.capitalone.dashboard.model.PipelineCommit;
import com.capitalone.dashboard.model.PipelineStage;
import com.capitalone.dashboard.repository.CollectorItemRepository;
import com.capitalone.dashboard.repository.CollectorRepository;
import com.capitalone.dashboard.repository.ComponentRepository;
import com.capitalone.dashboard.repository.DashboardRepository;
import com.capitalone.dashboard.repository.PipelineRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.mapping.event.AfterSaveEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@org.springframework.stereotype.Component
public class CommitEventListener extends HygieiaMongoEventListener<Commit> {
private final ComponentRepository componentRepository;
private final DashboardRepository dashboardRepository;
@Autowired
public CommitEventListener(ComponentRepository componentRepository,
DashboardRepository dashboardRepository,
CollectorRepository collectorRepository,
CollectorItemRepository collectorItemRepository,
PipelineRepository pipelineRepository) {
super(collectorItemRepository, pipelineRepository, collectorRepository);
this.componentRepository = componentRepository;
this.dashboardRepository = dashboardRepository;
}
@Override
public void onAfterSave(AfterSaveEvent<Commit> event) {
Commit commit = event.getSource();
// Add the commit to all pipelines associated with the team dashboards
// this commit is part of. But only if there is a build collector item
// configured on that dashboard. Otherwise, the commit will be orphaned
// in the commit stage.
=====================================================
== File: src/main/java/com/capitalone/dashboard/testutil/FongoConfig.java
=====================================================
package com.capitalone.dashboard.testutil;
import com.capitalone.dashboard.config.MongoConfig;
import com.github.fakemongo.Fongo;
import com.mongodb.MongoClient;
import org.springframework.context.annotation.Bean;
public class FongoConfig extends MongoConfig {
@Override
@Bean
public MongoClient mongo() {
return new Fongo(getDatabaseName()).getMongo();
}
@Override
protected String getDatabaseName() {
return "test-db";
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/testutil/TestRestOperations.java
=====================================================
package com.capitalone.dashboard.testutil;
import com.capitalone.dashboard.collector.RestOperationsSupplier;
import org.springframework.http.HttpStatus;
import org.springframework.web.client.RestOperations;
import java.util.HashMap;
import java.util.Map;
public class TestRestOperations<T> extends RestOperationsSupplier {
TestRestTemplate<? extends T> template;
private Map<String, TestResponse<T>> response;
public TestRestOperations(Map<String, TestResponse<T>> response) {
this.response = response;
}
public Map<String, TestResponse<T>> getResponse() {
return response;
}
public void addResponse(String key, TestResponse testResponse) {
if (response == null) {
response = new HashMap<>();
}
this.response.put(key, testResponse);
}
public void addResponse(String key, T body, HttpStatus httpStatus) {
if (response == null) {
response = new HashMap<>();
}
this.response.put(key, new TestResponse<>(body, httpStatus));
if (template != null) {
template.addResponse(key, new TestResponse<>(body, httpStatus));
}
}
public TestRestTemplate<? extends T> getTemplate() {
return template;
}
public void setTemplate(TestRestTemplate<? extends T> template) {
this.template = template;
}
@Override
public RestOperations get() {
if (template == null) {
=====================================================
== File: src/main/java/com/capitalone/dashboard/testutil/TestRestTemplate.java
=====================================================
package com.capitalone.dashboard.testutil;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
public class TestRestTemplate<T> extends RestTemplate {
private Map<String, TestResponse<T>> response;
public TestRestTemplate(Map<String, TestResponse<T>> response) {
this.response = response;
}
public Map<String, TestResponse<T>> getResponse() {
return response;
}
public void addResponse(String key, TestResponse testResponse) {
if (response == null) {
response = new HashMap<>();
}
this.response.put(key, testResponse);
}
public void addResponse(String key, T body, HttpStatus httpStatus) {
if (response == null) {
response = new HashMap<>();
}
this.response.put(key, new TestResponse<>(body, httpStatus));
}
public void clearResponse() {
if (response != null) {
response.clear();
}
}
@Override
public <T> ResponseEntity<T> exchange(String var1, HttpMethod var2, HttpEntity<?> var3, Class<T> var4, Object... var5) throws RestClientException {
if (response.containsKey(var1)) {
return new ResponseEntity(response.get(var1).getBody(),response.get(var1).getStatus());
} else {
=====================================================
== File: src/main/java/com/capitalone/dashboard/testutil/GsonUtil.java
=====================================================
package com.capitalone.dashboard.testutil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializer;
import org.bson.types.ObjectId;
import java.lang.reflect.Type;
public class GsonUtil {
private static final GsonBuilder gsonBuilder = new GsonBuilder()
.registerTypeAdapter(ObjectId.class, (JsonSerializer<ObjectId>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toHexString()))
.registerTypeAdapter(ObjectId.class, (JsonDeserializer<ObjectId>) GsonUtil::deserialize);
private static ObjectId deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
if (json instanceof JsonObject) {
JsonObject jo = (JsonObject) json;
return new ObjectId(jo.get("timestamp").getAsInt(), jo.get("machineIdentifier").getAsInt(), jo.get("processIdentifier").getAsShort(), jo.get("counter").getAsInt());
}
return new ObjectId(json.getAsString());
}
public static Gson getGson() {
return gsonBuilder.create();
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/testutil/BaseCollectorTestConfig.java
=====================================================
package com.capitalone.dashboard.testutil;
import com.capitalone.dashboard.collector.RestOperationsSupplier;
import org.mockito.Mockito;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.scheduling.TaskScheduler;
import java.util.HashMap;
import java.util.Map;
@ComponentScan(basePackages ={ "com.capitalone.dashboard.collector", "com.capitalone.dashboard.model"}, includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value=TaskScheduler.class),
@ComponentScan.Filter(type = FilterType.REGEX, pattern="com.capitalone.dashboard.collector.*CollectorTask.class"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.capitalone.dashboard.collector.*Settings.class")})
public class BaseCollectorTestConfig {
@Bean
public RestOperationsSupplier restOperationsSupplier() {
Map<String, TestResponse<String>> responseMap = new HashMap<>();
return new TestRestOperations(responseMap);
}
@Bean
public TaskScheduler taskScheduler() {
return Mockito.mock(TaskScheduler.class);
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/testutil/TestResponse.java
=====================================================
package com.capitalone.dashboard.testutil;
import org.springframework.http.HttpStatus;
public class TestResponse<T> {
private T body;
private HttpStatus status;
public TestResponse(T body, HttpStatus status) {
this.body = body;
this.status = status;
}
public T getBody() {
return body;
}
public void setBody(T body) {
this.body = body;
}
public HttpStatus getStatus() {
return status;
}
public void setStatus(HttpStatus status) {
this.status = status;
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/client/RestAuthType.java
=====================================================
package com.capitalone.dashboard.client;
public enum RestAuthType {
BASIC,
TOKEN;
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/client/RestUserInfo.java
=====================================================
package com.capitalone.dashboard.client;
public class RestUserInfo {
private String userId;
private String passCode;
public RestUserInfo(String userId, String passCode) {
this.userId = userId;
this.passCode = passCode;
}
public String getFormattedString() {
return userId.trim() + ":" + passCode.trim();
}
}
=====================================================
== File: src/main/java/com/capitalone/dashboard/client/RestClient.java
=====================================================
package com.capitalone.dashboard.client;
import com.capitalone.dashboard.util.Encryption;
import com.capitalone.dashboard.util.EncryptionException;
import com.capitalone.dashboard.util.Supplier;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestOperations;
import java.nio.charset.StandardCharsets;
import java.util.Map;
@Component
public class RestClient {
private static final Log LOG = LogFactory.getLog(RestClient.class);
private final RestOperations restOperations;
@Autowired
public RestClient(Supplier<RestOperations> restOperationsSupplier) {
this.restOperations = restOperationsSupplier.get();
}
public ResponseEntity<String> makeRestCallPost(String url, JSONObject body) {
if (restOperations == null) { return null; }
long start = System.currentTimeMillis();
ResponseEntity<String> response
= restOperations.exchange(url, HttpMethod.POST, new HttpEntity<Object>(body, null), String.class);
long end = System.currentTimeMillis();
LOG.info("Time taken to make a post call to "+url+" = "+(end-start));
return response;
}
|