From bac4c95aa3b82ff1a4f59f2dfaa0cd5b87bf3e07 Mon Sep 17 00:00:00 2001 From: Fotis Paraskevopoulos Date: Sun, 8 Jan 2012 14:20:08 +0200 Subject: [PATCH] Creating a set of analyzers which do not hold the history of the metrics but just a single metric per type and user. Added a small python script to create an arff file to vizualize in weka --- eu.alert-project.iccs.analysis/pom.xml | 13 + eu.alert-project.iccs.analysis/py/.gitignore | 2 + .../py/config.py.template | 23 ++ .../py/create_weka_correlation.py | 226 ++++++++++++++++++ .../eu.alert-project.iccs.graph.kde/pom.xml | 25 ++ .../iccs/graph/kde/api/GraphHandler.java | 5 + .../kde/swing/GraphViewerController.java | 1 + .../src/main/webapp/WEB-INF/ws-servlet.xml | 6 +- .../MailingListActivityAnalyzer.java | 27 ++- .../MailingListActivityHistoryAnalyzer.java | 42 ++++ .../scm/constructor/ScmActivityAnalyzer.java | 30 ++- .../ScmActivityHistoryAnalyzer.java | 41 ++++ .../constructor/ScmApiIntroducedAnalyzer.java | 24 +- .../ScmApiIntroducedHistoryAnalyzer.java | 87 +++++++ .../its/constructor/ItsActivityAnalyzer.java | 22 +- .../ItsActivityHistoryAnalyzer.java | 93 +++++++ .../stardom/datastore/api/dao/MetricDao.java | 2 +- .../Iccs/StardomBundle/Command/ScmCommand.php | 4 +- 18 files changed, 634 insertions(+), 39 deletions(-) create mode 100644 eu.alert-project.iccs.analysis/pom.xml create mode 100644 eu.alert-project.iccs.analysis/py/.gitignore create mode 100644 eu.alert-project.iccs.analysis/py/config.py.template create mode 100644 eu.alert-project.iccs.analysis/py/create_weka_correlation.py create mode 100644 eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityHistoryAnalyzer.java create mode 100644 eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityHistoryAnalyzer.java create mode 100644 eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedHistoryAnalyzer.java create mode 100644 eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityHistoryAnalyzer.java diff --git a/eu.alert-project.iccs.analysis/pom.xml b/eu.alert-project.iccs.analysis/pom.xml new file mode 100644 index 0000000..b0bb904 --- /dev/null +++ b/eu.alert-project.iccs.analysis/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + eu.alert-project.iccs.analysis + core + 0.0.1-SNAPSHOT + pom + eu.alert-project.iccs.analysis + + \ No newline at end of file diff --git a/eu.alert-project.iccs.analysis/py/.gitignore b/eu.alert-project.iccs.analysis/py/.gitignore new file mode 100644 index 0000000..0300510 --- /dev/null +++ b/eu.alert-project.iccs.analysis/py/.gitignore @@ -0,0 +1,2 @@ +*.pyc +config.py \ No newline at end of file diff --git a/eu.alert-project.iccs.analysis/py/config.py.template b/eu.alert-project.iccs.analysis/py/config.py.template new file mode 100644 index 0000000..5fea08a --- /dev/null +++ b/eu.alert-project.iccs.analysis/py/config.py.template @@ -0,0 +1,23 @@ +#The connection details of the stardom database +alert_db_host="localhost" +alert_db_port=8889 +alert_db_user="alert" +alert_db_name="alert_dev" +alert_db_password="1234" + + +#The connection details of the cvsanaly database +cvsanaly_db_host="localhost" +cvsanaly_db_port=8889 +cvsanaly_db_user="alert" +cvsanaly_db_name="cvsanaly_kde_solid" +cvsanaly_db_password="1234" + + +#The location containing the betweeness values +io_betweenness_file="~/Betweenness.csv" + +#The directory where the results should be stored +io_results_directory=~/tmp" + +#### Do not modify under this line diff --git a/eu.alert-project.iccs.analysis/py/create_weka_correlation.py b/eu.alert-project.iccs.analysis/py/create_weka_correlation.py new file mode 100644 index 0000000..873e63a --- /dev/null +++ b/eu.alert-project.iccs.analysis/py/create_weka_correlation.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python +from datetime import date, datetime + +import MySQLdb +import csv +import re +import time +import config + + +QRY_DROP_TABLE="DROP TABLE IF EXISTS `identity_csvid` ; " \ + "CREATE TABLE `identity_csvid` ( " \ + "`identity_id` INT NOT NULL, " \ + "`user_id` INT NOT NULL, " \ + "`name` TEXT NOT NULL, " \ + "`email` TEXT NOT NULL) ENGINE = InnoDB;" + +QRY_SELECT_ALL_PEOPLE = "select id,name, email from people" + +QRY_SELECT_IDENTITY = """select distinct identity_id + from profile p + join identity_is_profile i on p.id=i.profile_id + where email=%s;""" + +QRY_INSERT_CSVID = """insert into identity_csvid VALUES(%s,%s,%s,%s) ;""" + + + + +def date_distance(date1): + fmt = '%Y-%m-%d %H:%M:%S' + d1 = datetime.strptime('2012-01-01 17:31:22', fmt) + d2 = datetime.strptime(date1, fmt) + return (d2-d1).days + +def get_alert_connection(): + return MySQLdb.connect ( + host = config.alert_db_host, + port = config.alert_db_port, + user = config.alert_db_user, + passwd = config.alert_db_password, + db = config.alert_db_name) + + + + +def people_mapping_init(): + + + user_to_identity_dict={} + + alert_conn = get_alert_connection() + + cvsanaly_conn = MySQLdb.connect ( + host = config.cvsanaly_db_host, + port = config.cvsanaly_db_port, + user = config.cvsanaly_db_user, + passwd = config.cvsanaly_db_password, + db = config.cvsanaly_db_name) + + + # Apparently this is a compound statement and + # we should close and reopen the cursor + alert_cursor=alert_conn.cursor () + alert_cursor.execute (QRY_DROP_TABLE) + alert_cursor.close() + + csv_cursor = cvsanaly_conn.cursor () + all_cvsanaly_people = csv_cursor.execute (QRY_SELECT_ALL_PEOPLE) + + counter = 0 + for x in range(all_cvsanaly_people): + row=csv_cursor.fetchone () + user_id=row[0] + name=row[1] + email = row[2] + repl=' ' + email = re.sub(r"[-_\+\.@]", repl, email) + name = re.sub(r"[\']", repl, name) + + print "Processing %s => %s " % (user_id,email,) + + alert_cursor=alert_conn.cursor () + alert_cursor.execute (QRY_SELECT_IDENTITY, (email,)) + alert_row=alert_cursor.fetchone () + + if alert_row is None: + print '%s NOT FOUND!!! ' % email + continue + identity_id=alert_row[0] + print "Identity id %s found for %s " % (identity_id,email,) + alert_cursor.execute (QRY_INSERT_CSVID, (identity_id,user_id,name,email,)) + + user_to_identity_dict[user_id]=identity_id + alert_cursor.close () + + csv_cursor.close() + alert_conn.close() + cvsanaly_conn.close() + + return user_to_identity_dict + + +def get_metric(connection, query, identity_id): + print "Executing "+query + cursor = connection.cursor() + cursor.execute ( + query, + (identity_id,) + ) + + ret = 0 + row=cursor.fetchone () + if row is not None: + ret =row[1] + + cursor.close() + + return ret + +def get_quantitative_metric(connection, identity_id , metric_name): + + qry = """select m.id,quantity,m.identity_id,m.created_at + from %s as scm + inner join metric_quantitative as mq on scm.id=mq.id + inner join metric as m on scm.id=m.id + where m.identity_id=%s + limit 1;""" % (metric_name,"%s",) + + return get_metric(connection,qry,identity_id) + + +def get_temporal_metric(connection, identity_id , metric_name): + qry = """select m.id,temporal,identity_id,created_at + from %s as scm + inner join metric_temporal as mt on scm.id=mt.id + inner join metric as m on scm.id=m.id + where identity_id=%s + limit 1;""" % (metric_name,"%s",) + return date_distance(get_metric(connection,qry,metric_name,identity_id)) + + +if __name__ == '__main__': + + metrics = { + "scm_activity_metric" :[1, "q"], + "its_activity_metric" :[1, "q"], + "mailing_list_activity_metric" :[1, "q"], + "scm_api_introduced_metric" :[1, "q"], + "scm_api_usage_count_metric" :[1, "q"], + + "scm_temporal_metric" :[0, "t"], + "its_temporal_metric" :[0, "t"], + "mailing_list_temporal_metric" :[0, "t"], + } + + # You propably shouldnt bother with what is under this line + # + # --------------------------------------------------------- + # + + + + #create the file + output_file=config.io_results_file+"/%s.arff" % ("correlation-"+datetime.now().strftime("%Y%m%d%H%S")) + print "Creating output file %s" % output_file; + + bugAWriter = open(output_file, 'wb') + bugAWriter.writelines( + """ % 1. Title: Bug Solution Dataset Numeric +% +% 2. Sources: +%(a) Creator: ALERT Project +%(b) Date: August, 2011 +%\n\n""" + ) + + bugAWriter.writelines("@RELATION bug\n") + bugAWriter.writelines("\n\n\n") + bugAWriter.writelines("@ATTRIBUTE identity_id NUMERIC\n") + + # Go over the enabled metrics and create the heading + for metric_name, values in metrics.iteritems(): + + if values[0] >= 1: + bugAWriter.writelines("@ATTRIBUTE %s NUMERIC\n" % metric_name) + + + + bugAWriter.writelines("@ATTRIBUTE betweeness NUMERIC\n") + bugAWriter.writelines("\n@DATA\n") + + + + people_map_dict={} + people_map_dict = people_mapping_init() + + alert_conn = get_alert_connection() + spamReader = csv.reader(open(config.io_betweenness_file, 'rb'),delimiter='\t', quotechar='|') + + for row in spamReader: + + identity_id=people_map_dict[int(row[0])] + btness=row[1] + + #tdesc = "select m.id,quantity,m.identity_id,created_at from scm_activity_metric as scm inner join metric_quantitative as mq on scm.id=mq.id inner join metric as m on scm.id=m.id where m.identity_id='"+str(identity_id)+"' order by quantity desc limit 1;" + + result =[] + result.append(identity_id) + + for metric_name, values in metrics.iteritems(): + + if values[0] >= 1: + + if values[1] == 'q': + result.append(get_quantitative_metric(alert_conn,identity_id,metric_name)) + elif values[1] == 't': + result.append(get_temporal_metric(alert_conn,identity_id,metric_name)) + + + result.append(btness) + bugAWriter.writelines(', '.join(str(x) for x in result)+"\n") + + + bugAWriter.close() + alert_conn.close () diff --git a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/pom.xml b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/pom.xml index 9a166ce..ba6c1ac 100644 --- a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/pom.xml +++ b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/pom.xml @@ -13,6 +13,26 @@ + + org.springframework + spring-core + + + + org.springframework + spring-context + + + + org.springframework + spring-support + + + + org.springframework + spring-jdbc + + net.sf.jung jung-api @@ -42,6 +62,11 @@ jung-jai + + mysql + mysql-connector-java + + commons-io commons-io diff --git a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/api/GraphHandler.java b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/api/GraphHandler.java index 80b2c69..032a91b 100644 --- a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/api/GraphHandler.java +++ b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/api/GraphHandler.java @@ -76,6 +76,10 @@ public Graph create(File inputFile,File outputFile){ } + //correct authors + + + logger.trace("void main(args) Vertex Count: {} ", graph.getVertexCount()); @@ -83,6 +87,7 @@ public Graph create(File inputFile,File outputFile){ logger.trace("void main(args) Betweeness calculated"); + fos = new FileOutputStream(outputFile); osw = new OutputStreamWriter(fos, "UTF-8"); fw = new BufferedWriter(osw); diff --git a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/swing/GraphViewerController.java b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/swing/GraphViewerController.java index 607129f..d7c828e 100644 --- a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/swing/GraphViewerController.java +++ b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/swing/GraphViewerController.java @@ -247,6 +247,7 @@ public boolean evaluate(String s) { } }).transform(simpleGraph); + return simpleGraph; } diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.alert-connector/src/main/webapp/WEB-INF/ws-servlet.xml b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.alert-connector/src/main/webapp/WEB-INF/ws-servlet.xml index 61a2d73..8fb0021 100644 --- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.alert-connector/src/main/webapp/WEB-INF/ws-servlet.xml +++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.alert-connector/src/main/webapp/WEB-INF/ws-servlet.xml @@ -174,20 +174,20 @@ - + - + - + diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityAnalyzer.java index be156fc..aba13c0 100644 --- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityAnalyzer.java +++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityAnalyzer.java @@ -9,6 +9,8 @@ import org.slf4j.LoggerFactory; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * User: fotis * Date: 15/07/11 @@ -27,18 +29,27 @@ public void analyze(Identity identity, MailingListAction action) { return; } - MailingListActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, MailingListActivityMetric.class); + List forIdentity = getMetricDao().getForIdentity(identity, MailingListActivityMetric.class); + + MailingListActivityMetric metric = null; + if(forIdentity ==null || forIdentity.size() <=0){ - MailingListActivityMetric newMetric = new MailingListActivityMetric(); - newMetric.setCreatedAt(action.getDate()); - newMetric.setIdentity(identity); - newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity()); + metric = new MailingListActivityMetric(); + metric.setQuantity(0); + metric.setIdentity(identity); + metric = (MailingListActivityMetric) getMetricDao().insert(metric); + + }else{ + metric = forIdentity.get(0); + } - newMetric.increaseQuantity(); + metric.setCreatedAt(action.getDate()); + metric.setCreatedAt(action.getDate()); + metric.increaseQuantity(); - newMetric = (MailingListActivityMetric) getMetricDao().insert(newMetric); + metric = (MailingListActivityMetric)getMetricDao().update(metric); - logger.trace("void analyze() {} ", newMetric); + logger.trace("void analyze() {} ", metric); } } diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityHistoryAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityHistoryAnalyzer.java new file mode 100644 index 0000000..e86d974 --- /dev/null +++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityHistoryAnalyzer.java @@ -0,0 +1,42 @@ +package eu.alertproject.iccs.stardom.analyzers.mailing.constructor; + +import eu.alertproject.iccs.stardom.analyzers.mailing.connector.MailingListAction; +import eu.alertproject.iccs.stardom.domain.api.Identity; +import eu.alertproject.iccs.stardom.domain.api.metrics.MailingListActivityMetric; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.transaction.annotation.Transactional; + +/** + * User: fotis + * Date: 15/07/11 + * Time: 22:57 + */ + +public class MailingListActivityHistoryAnalyzer extends AbstractMailingListAnalyzer { + + private Logger logger = LoggerFactory.getLogger(MailingListActivityHistoryAnalyzer.class); + + @Override + @Transactional + public void analyze(Identity identity, MailingListAction action) { + + if(identity == null ){ + return; + } + + MailingListActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, MailingListActivityMetric.class); + + MailingListActivityMetric newMetric = new MailingListActivityMetric(); + newMetric.setCreatedAt(action.getDate()); + newMetric.setIdentity(identity); + newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity()); + + newMetric.increaseQuantity(); + + newMetric = (MailingListActivityMetric) getMetricDao().insert(newMetric); + + logger.trace("void analyze() {} ", newMetric); + + } +} diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityAnalyzer.java index ba9cff1..56338e7 100644 --- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityAnalyzer.java +++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityAnalyzer.java @@ -2,12 +2,15 @@ import eu.alertproject.iccs.stardom.analyzers.scm.connector.ScmAction; import eu.alertproject.iccs.stardom.domain.api.Identity; +import eu.alertproject.iccs.stardom.domain.api.metrics.ItsActivityMetric; import eu.alertproject.iccs.stardom.domain.api.metrics.ScmActivityMetric; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * User: fotis * Date: 15/07/11 @@ -26,17 +29,26 @@ public void analyze(Identity identity, ScmAction action) { return; } - ScmActivityMetric sqm = getMetricDao().getMostRecentMetric(identity,ScmActivityMetric.class); + List forIdentity = getMetricDao().getForIdentity(identity, ScmActivityMetric.class); + + ScmActivityMetric metric = null; + if(forIdentity ==null || forIdentity.size() <=0){ + + metric = new ScmActivityMetric(); + metric.setQuantity(0); + metric.setIdentity(identity); + metric = (ScmActivityMetric) getMetricDao().insert(metric); + + }else{ + metric = forIdentity.get(0); + } + + metric.setCreatedAt(action.getDate()); + metric.increaseQuantity(); - logger.trace("void analyze() Handling {} -> {} ",identity.getUuid(),action.getDate()); + metric = (ScmActivityMetric)getMetricDao().update(metric); - ScmActivityMetric newMetric = new ScmActivityMetric(); - newMetric.setCreatedAt(action.getDate()); - newMetric.setIdentity(identity); - newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity() + 1); - newMetric = (ScmActivityMetric) getMetricDao().insert(newMetric); + logger.trace("void analyze() {} ",metric); - logger.trace("void analyze() {} = {} -> {} ", - new Object[]{identity.getUuid(),(sqm ==null ?0:sqm.getQuantity()),newMetric.getQuantity()}); } } diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityHistoryAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityHistoryAnalyzer.java new file mode 100644 index 0000000..bde2dbc --- /dev/null +++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityHistoryAnalyzer.java @@ -0,0 +1,41 @@ +package eu.alertproject.iccs.stardom.analyzers.scm.constructor; + +import eu.alertproject.iccs.stardom.analyzers.scm.connector.ScmAction; +import eu.alertproject.iccs.stardom.domain.api.Identity; +import eu.alertproject.iccs.stardom.domain.api.metrics.ScmActivityMetric; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.transaction.annotation.Transactional; + +/** + * User: fotis + * Date: 15/07/11 + * Time: 22:57 + */ + +public class ScmActivityHistoryAnalyzer extends AbstractScmAnalyzer { + + private Logger logger = LoggerFactory.getLogger(ScmActivityHistoryAnalyzer.class); + + @Override + @Transactional + public void analyze(Identity identity, ScmAction action) { + + if(identity == null ){ + return; + } + + ScmActivityMetric sqm = getMetricDao().getMostRecentMetric(identity,ScmActivityMetric.class); + + logger.trace("void analyze() Handling {} -> {} ",identity.getUuid(),action.getDate()); + + ScmActivityMetric newMetric = new ScmActivityMetric(); + newMetric.setCreatedAt(action.getDate()); + newMetric.setIdentity(identity); + newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity() + 1); + newMetric = (ScmActivityMetric) getMetricDao().insert(newMetric); + + logger.trace("void analyze() {} = {} -> {} ", + new Object[]{identity.getUuid(),(sqm ==null ?0:sqm.getQuantity()),newMetric.getQuantity()}); + } +} diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedAnalyzer.java index fcd7bbc..9b5a72d 100644 --- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedAnalyzer.java +++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedAnalyzer.java @@ -56,19 +56,27 @@ public void analyze(Identity identity, ScmAction action) { if(byIdentityPathAndSignature == null ){ - ScmApiIntroducedMetric sqm = getMetricDao().getMostRecentMetric(identity,ScmApiIntroducedMetric.class); + List sqmForIdenity = getMetricDao().getForIdentity(identity,ScmApiIntroducedMetric.class); logger.trace("void analyze() Handling {} -> {} ",identity.getUuid(),action.getDate()); - ScmApiIntroducedMetric newMetric = new ScmApiIntroducedMetric(); - newMetric.setCreatedAt(action.getDate()); - newMetric.setIdentity(identity); - newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity() + 1); - newMetric = (ScmApiIntroducedMetric) getMetricDao().insert(newMetric); + ScmApiIntroducedMetric metric = null; + if(sqmForIdenity ==null || sqmForIdenity.size() <= 0 ){ + metric = new ScmApiIntroducedMetric(); + metric.setIdentity(identity); + metric.setQuantity(0); + metric = (ScmApiIntroducedMetric) getMetricDao().insert(metric); + }else{ + metric = sqmForIdenity.get(0); + } - logger.trace("void analyze() {} = {} -> {} ", - new Object[]{identity.getUuid(),(sqm ==null ?0:sqm.getQuantity()),newMetric.getQuantity()}); + metric.setCreatedAt(action.getDate()); + metric.increaseQuantity(); + + metric = (ScmApiIntroducedMetric) getMetricDao().update(metric); + + logger.trace("void analyze() {} ",metric); PathSignatureHistory pathSignatureHistory = new PathSignatureHistory(); diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedHistoryAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedHistoryAnalyzer.java new file mode 100644 index 0000000..84e3ac3 --- /dev/null +++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedHistoryAnalyzer.java @@ -0,0 +1,87 @@ +package eu.alertproject.iccs.stardom.analyzers.scm.constructor; + +import eu.alertproject.iccs.stardom.analyzers.scm.connector.ScmAction; +import eu.alertproject.iccs.stardom.analyzers.scm.connector.ScmFile; +import eu.alertproject.iccs.stardom.datastore.api.dao.PathSignatureHistoryDao; +import eu.alertproject.iccs.stardom.domain.api.Identity; +import eu.alertproject.iccs.stardom.domain.api.PathSignatureHistory; +import eu.alertproject.iccs.stardom.domain.api.metrics.ScmApiIntroducedMetric; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * User: fotis + * Date: 17/07/11 + * Time: 14:07 + */ +public class ScmApiIntroducedHistoryAnalyzer extends AbstractScmAnalyzer { + + private Logger logger = LoggerFactory.getLogger(ScmApiIntroducedHistoryAnalyzer.class); + + @Autowired + PathSignatureHistoryDao pathSignatureHistoryDao; + + @Override + @Transactional + public void analyze(Identity identity, ScmAction action) { + + if(identity ==null){ + return; + } + + List newFiles = new ArrayList(); + + //check if the api has been introduced before + List files = action.getFiles(); + + for(ScmFile sf: files){ + + String path = sf.getName(); + + + + List functions = sf.getFunctions(); + for(String signature: functions) { + + PathSignatureHistory byIdentityPathAndSignature = pathSignatureHistoryDao.findByIdentityPathAndSignature( + identity, + path, + signature); + + + if(byIdentityPathAndSignature == null ){ + + ScmApiIntroducedMetric sqm = getMetricDao().getMostRecentMetric(identity,ScmApiIntroducedMetric.class); + + logger.trace("void analyze() Handling {} -> {} ",identity.getUuid(),action.getDate()); + + ScmApiIntroducedMetric newMetric = new ScmApiIntroducedMetric(); + newMetric.setCreatedAt(action.getDate()); + newMetric.setIdentity(identity); + newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity() + 1); + newMetric = (ScmApiIntroducedMetric) getMetricDao().insert(newMetric); + + + logger.trace("void analyze() {} = {} -> {} ", + new Object[]{identity.getUuid(),(sqm ==null ?0:sqm.getQuantity()),newMetric.getQuantity()}); + + + PathSignatureHistory pathSignatureHistory = new PathSignatureHistory(); + pathSignatureHistory.setIdentity(identity); + pathSignatureHistory.setPath(path); + pathSignatureHistory.setSignature(signature); + + pathSignatureHistoryDao.insert(pathSignatureHistory); + + } + } + + } + + } +} diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityAnalyzer.java index 3f35cd9..e90dc58 100644 --- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityAnalyzer.java +++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityAnalyzer.java @@ -35,18 +35,24 @@ public void analyze(Identity identity, ItsAction action) { return; } - ItsActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, ItsActivityMetric.class); + ItsActivityMetric metric = getMetricDao().getMostRecentMetric(identity, ItsActivityMetric.class); + + //check if the metric exists + if( metric == null){ + //create + + metric = new ItsActivityMetric(); + metric.setIdentity(identity); + metric.setQuantity(0); + metric = (ItsActivityMetric) getMetricDao().insert(metric); - ItsActivityMetric newMetric = new ItsActivityMetric(); - newMetric.setCreatedAt(action.getDate()); - newMetric.setIdentity(identity); - newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity()); + } - newMetric.increaseQuantity(); + metric.increaseQuantity(); - newMetric = (ItsActivityMetric) getMetricDao().insert(newMetric); + getMetricDao().update(metric); - logger.trace("void analyze() {} ",newMetric); + logger.trace("void analyze() {} ",metric); } diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityHistoryAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityHistoryAnalyzer.java new file mode 100644 index 0000000..dc1a64c --- /dev/null +++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityHistoryAnalyzer.java @@ -0,0 +1,93 @@ +package eu.alertproject.iccs.stardom.analyzers.its.constructor; + +import eu.alertproject.iccs.stardom.analyzers.its.connector.DefaultItsAction; +import eu.alertproject.iccs.stardom.analyzers.its.connector.DefaultItsCommentAction; +import eu.alertproject.iccs.stardom.analyzers.its.connector.ItsAction; +import eu.alertproject.iccs.stardom.domain.api.Identity; +import eu.alertproject.iccs.stardom.domain.api.metrics.ItsActivityMetric; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.transaction.annotation.Transactional; + +/** + * User: fotis + * Date: 18/07/11 + * Time: 09:37 + */ +public class ItsActivityHistoryAnalyzer extends AbstractItsAnalyzer{ + + private Logger logger = LoggerFactory.getLogger(ItsActivityHistoryAnalyzer.class); + + + //Idenity here is null carefull + @Override + @Transactional + public void analyze(Identity identity, ItsAction action) { + + if(identity == null ){ + return; + } + + ItsActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, ItsActivityMetric.class); + + ItsActivityMetric newMetric = new ItsActivityMetric(); + newMetric.setCreatedAt(action.getDate()); + newMetric.setIdentity(identity); + newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity()); + + newMetric.increaseQuantity(); + + newMetric = (ItsActivityMetric) getMetricDao().insert(newMetric); + + logger.trace("void analyze() {} ",newMetric); + + } + + private void handleItsAction(Identity identity, DefaultItsAction action){ + + ItsActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, ItsActivityMetric.class); + + //check if the metric exists + if( sqm == null){ + //create + + sqm = new ItsActivityMetric(); + sqm.setIdentity(identity); + sqm.setQuantity(0); + sqm = (ItsActivityMetric) getMetricDao().insert(sqm); + + } + + sqm.increaseQuantity(); + + getMetricDao().update(sqm); + + + + } + + private void handleItsCommentAction(Identity identity, DefaultItsCommentAction action){ + + + ItsActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, ItsActivityMetric.class); + + //check if the metric exists + if( sqm == null){ + //create + + sqm = new ItsActivityMetric(); + sqm.setIdentity(identity); + sqm.setQuantity(0); + sqm = (ItsActivityMetric) getMetricDao().insert(sqm); + + } + + sqm.increaseQuantity(); + + getMetricDao().update(sqm); + + } + +} + + diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.datastore/src/main/java/eu/alertproject/iccs/stardom/datastore/api/dao/MetricDao.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.datastore/src/main/java/eu/alertproject/iccs/stardom/datastore/api/dao/MetricDao.java index b203840..f0ed655 100644 --- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.datastore/src/main/java/eu/alertproject/iccs/stardom/datastore/api/dao/MetricDao.java +++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.datastore/src/main/java/eu/alertproject/iccs/stardom/datastore/api/dao/MetricDao.java @@ -14,7 +14,7 @@ public interface MetricDao extends CommonDao{ public List getForIdentity(Identity identity); - public List getForIdentity(Identity identity, Class aClass); + public List getForIdentity(Identity identity, Class aClass); public T getMostRecentMetric(Identity identity, Class aClass); diff --git a/test-environments/constructor/Symfony/src/Iccs/StardomBundle/Command/ScmCommand.php b/test-environments/constructor/Symfony/src/Iccs/StardomBundle/Command/ScmCommand.php index 9826d0f..35dc34f 100644 --- a/test-environments/constructor/Symfony/src/Iccs/StardomBundle/Command/ScmCommand.php +++ b/test-environments/constructor/Symfony/src/Iccs/StardomBundle/Command/ScmCommand.php @@ -195,13 +195,13 @@ private function postActiveMqPayload(\Stomp_Stomp $producer,$payload){ //echo $values.PHP_EOL; $this->counter++; - $producer->begin("tx1"); +// $producer->begin("tx1"); $producer->send( "/topic/".$this->getContainer()->getParameter("stardom.stomp.scm.topic"), $values); - $producer->commit("tx1"); +// $producer->commit("tx1"); }