![JAR search and dependency download from the Maven repository](/logo.png)
com.capitalone.dashboard.collector.AppdynamicsCollectorTask Maven / Gradle / Ivy
package com.capitalone.dashboard.collector;
import com.capitalone.dashboard.model.*;
import com.capitalone.dashboard.repository.AppDynamicsApplicationRepository;
import com.capitalone.dashboard.repository.AppdynamicsCollectorRepository;
import com.capitalone.dashboard.repository.BaseCollectorRepository;
import com.capitalone.dashboard.repository.PerformanceRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Component
public class AppdynamicsCollectorTask extends CollectorTask {
private final AppdynamicsCollectorRepository appdynamicsCollectorRepository;
private final AppDynamicsApplicationRepository appDynamicsApplicationRepository;
private final PerformanceRepository performanceRepository;
private final AppdynamicsClient appdynamicsClient;
private final AppdynamicsSettings appdynamicsSettings;
@Autowired
public AppdynamicsCollectorTask(TaskScheduler taskScheduler,
AppdynamicsCollectorRepository appdynamicsCollectorRepository,
AppDynamicsApplicationRepository appDynamicsApplicationRepository,
PerformanceRepository performanceRepository,
AppdynamicsSettings appdynamicsSettings,
AppdynamicsClient appdynamicsClient) {
super(taskScheduler, "Appdynamics");
this.appdynamicsCollectorRepository = appdynamicsCollectorRepository;
this.appDynamicsApplicationRepository = appDynamicsApplicationRepository;
this.performanceRepository = performanceRepository;
this.appdynamicsSettings = appdynamicsSettings;
this.appdynamicsClient = appdynamicsClient;
}
@Override
public AppdynamicsCollector getCollector() {
return AppdynamicsCollector.prototype(appdynamicsSettings);
}
@Override
public BaseCollectorRepository getCollectorRepository() {
return appdynamicsCollectorRepository;
}
@Override
public String getCron() {
return appdynamicsSettings.getCron();
}
@Override
public void collect(AppdynamicsCollector collector) {
long start = System.currentTimeMillis();
List instanceURLs = collector.getInstanceUrls();
List> apps = new ArrayList<>();
for (int i = 0; i < instanceURLs.size(); i++)
apps.add(new HashSet<>());
int index = 0;
for (String instanceURL : instanceURLs) {
logBanner("Instance " + index + ": " + instanceURL);
List existingApps = appDynamicsApplicationRepository.findByCollectorIdAndInstanceID(collector.getId(), index);
apps.get(index).addAll(appdynamicsClient.getApplications(instanceURL));
log("Fetched applications " + ((apps.get(index) != null) ? apps.size() : 0), start);
addNewProjects(apps.get(index), existingApps, collector, instanceURL, index);
refreshData(enabledApplications(collector, index), instanceURL);
index++;
}
log("Finished", start);
}
private void refreshData(List apps, String instanceURL) {
long start = System.currentTimeMillis();
int count = 0;
for (AppdynamicsApplication app : apps) {
Map metrics = appdynamicsClient.getPerformanceMetrics(app, instanceURL);
if (!CollectionUtils.isEmpty(metrics)) {
Performance performance = new Performance();
performance.setCollectorItemId(app.getId());
performance.setTimestamp(System.currentTimeMillis());
performance.setType(PerformanceType.ApplicationPerformance);
performance.setMetrics(new HashMap(metrics));
if (isNewPerformanceData(app, performance)) {
performanceRepository.save(performance);
count++;
}
}
}
log("Updated", start, count);
}
private static String replaceDot(String suspect){
if(!suspect.isEmpty()){
return suspect.replaceAll("\\.","U+00B7");
}
return suspect;
}
private List enabledApplications(AppdynamicsCollector collector, int instanceID) {
return appDynamicsApplicationRepository.findByCollectorIdAndEnabledAndInstanceID(collector.getId(), true, instanceID);
}
private void addNewProjects(Set allApps, List exisingApps, AppdynamicsCollector collector, String instanceURL, int instanceID) {
long start = System.currentTimeMillis();
int count = 0;
Set newApps = new HashSet<>();
for (AppdynamicsApplication app : allApps) {
if (!exisingApps.contains(app)) {
app.setCollectorId(collector.getId());
app.setAppDashboardUrl(String.format(appdynamicsSettings.getDashboardUrl(instanceURL),app.getAppID()));
app.setEnabled(false);
app.setinstanceID(instanceID);
newApps.add(app);
count++;
}
}
//save all in one shot
if (!CollectionUtils.isEmpty(newApps)) {
appDynamicsApplicationRepository.save(newApps);
}
log("New appplications: ", start, count);
}
private boolean isNewPerformanceData(AppdynamicsApplication appdynamicsApplication, Performance performance) {
return performanceRepository.findByCollectorItemIdAndTimestamp(
appdynamicsApplication.getId(), performance.getTimestamp()) == null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy