├── .Rprofile ├── .gitattributes ├── .gitignore ├── .travis.yml ├── COPYING ├── README.md ├── Vagrantfile ├── analysis_example.sh ├── codeface.conf ├── codeface ├── DBAnalysis.py ├── R │ ├── analyse_ts.r │ ├── boundaries.r │ ├── cluster │ │ ├── community_helpers.r │ │ ├── community_metrics.r │ │ ├── graph_comparison.r │ │ ├── network_visualization.r │ │ ├── persons.r │ │ ├── plot.r │ │ ├── test_community_metrics.R │ │ ├── test_graph_comparison.r │ │ └── vis.r │ ├── clusters.r │ ├── commits.r │ ├── complexity.r │ ├── config.r │ ├── conway_data.r │ ├── conway_global.r │ ├── conway_metrics.r │ ├── db.r │ ├── dependency_analysis.r │ ├── developer_classification.r │ ├── do_test.r │ ├── download.r │ ├── experiments │ │ └── code_ownership.r │ ├── gen_dsm.r │ ├── id_manager.r │ ├── interactive.r │ ├── mc_helpers.r │ ├── ml │ │ ├── .gitignore │ │ ├── analysis.r │ │ ├── batch.r │ │ ├── download.r │ │ ├── init.response.r │ │ ├── keyword.list.r │ │ ├── ml_utils.r │ │ ├── project.spec.r │ │ ├── test_analysis.r │ │ ├── test_data │ │ │ └── gmane.comp.emulators.qemu.mbox │ │ ├── thread.info.r │ │ └── twomode.r │ ├── network_stream.r │ ├── plot.r │ ├── process_dsm.r │ ├── process_jira.r │ ├── quality_analysis.r │ ├── query.r │ ├── semantic_dependency.r │ ├── shiny │ │ ├── apps │ │ │ ├── common.server.r │ │ │ ├── common.ui.r │ │ │ ├── dashboard │ │ │ │ ├── README │ │ │ │ ├── global.r │ │ │ │ ├── gridsterWidgetsExt.r │ │ │ │ ├── server.r │ │ │ │ ├── ui.r │ │ │ │ ├── widget.basics.config │ │ │ │ ├── widget.collaboration.config │ │ │ │ ├── widget.communication.config │ │ │ │ ├── widget.complexity.config │ │ │ │ ├── widget.config │ │ │ │ ├── widget.construction.config │ │ │ │ ├── widget.overview.config │ │ │ │ ├── widget.test.config │ │ │ │ └── www │ │ │ │ │ ├── gridsterWidgetsExt.js │ │ │ │ │ ├── js │ │ │ │ │ ├── justgage.1.0.1.min.js │ │ │ │ │ └── raphael.2.1.0.min.js │ │ │ │ │ ├── justgage_binding.js │ │ │ │ │ ├── shiny_status_binding.js │ │ │ │ │ └── styles.css │ │ │ ├── details │ │ │ │ ├── global.r │ │ │ │ ├── server.r │ │ │ │ └── ui.r │ │ │ ├── plots │ │ │ │ ├── server.r │ │ │ │ └── ui.r │ │ │ ├── projects │ │ │ │ ├── global.r │ │ │ │ ├── server.r │ │ │ │ └── ui.r │ │ │ ├── timeseries │ │ │ │ ├── server.r │ │ │ │ └── ui.r │ │ │ └── timezones │ │ │ │ ├── server.r │ │ │ │ └── ui.r │ │ ├── color.r │ │ ├── figures.of.merit.r │ │ ├── index.html │ │ ├── nav │ │ │ ├── breadcrumb.brandville.r │ │ │ ├── breadcrumb.config.r │ │ │ ├── breadcrumb.shiny.r │ │ │ ├── js │ │ │ │ ├── Symbola.ttf │ │ │ │ ├── chosen-sprite.png │ │ │ │ ├── chosen-sprite@2x.png │ │ │ │ ├── chosen.jquery.min.js │ │ │ │ ├── chosen.min.css │ │ │ │ ├── d3.layout.cloud.js │ │ │ │ ├── d3.v3.min.js │ │ │ │ ├── qa_cookie.js │ │ │ │ ├── qa_modal.js │ │ │ │ └── symbola.css │ │ │ ├── qa_cookie.r │ │ │ └── qa_modal.r │ │ ├── symbols.r │ │ ├── tests │ │ │ ├── breadcrumb-test │ │ │ │ ├── server.r │ │ │ │ └── ui.r │ │ │ ├── carousel-test │ │ │ │ ├── server.r │ │ │ │ ├── ui.r │ │ │ │ └── www │ │ │ │ │ ├── P1.jpg │ │ │ │ │ ├── P2.jpg │ │ │ │ │ ├── P3.jpg │ │ │ │ │ ├── bootstrap-carousel.css │ │ │ │ │ ├── bootstrap-carousel.js │ │ │ │ │ └── carousel.html │ │ │ └── cookie-test │ │ │ │ ├── qa_cookie.r │ │ │ │ ├── server.r │ │ │ │ ├── ui.r │ │ │ │ └── www │ │ │ │ ├── chosen-sprite.png │ │ │ │ ├── chosen-sprite@2x.png │ │ │ │ ├── chosen.jquery.min.js │ │ │ │ ├── chosen.min.css │ │ │ │ └── qa_cookie.js │ │ ├── widgets.r │ │ └── widgets │ │ │ ├── commit.info.r │ │ │ ├── commit.structure.r │ │ │ ├── complexity.r │ │ │ ├── contributions.r │ │ │ ├── contributors.r │ │ │ ├── general.info.r │ │ │ ├── init.response_ml.r │ │ │ ├── overview.r │ │ │ ├── plots.r │ │ │ ├── punchcard.r │ │ │ ├── punchcard_ml.r │ │ │ ├── release_distance.r │ │ │ ├── tagcloud.r │ │ │ ├── timeseries.r │ │ │ ├── timezones.r │ │ │ ├── tz.png │ │ │ ├── vis.clusters.r │ │ │ └── weekend.r │ ├── sloc_hashes │ ├── sloccount.r │ ├── socio_technical_analysis.r │ ├── st_relations.r │ ├── system.r │ ├── test_breadcrumb.r │ ├── test_dependency_analysis.R │ ├── test_developer_classification.r │ ├── test_network_stream.R │ ├── test_utils.r │ ├── test_widgets.r │ ├── timezones.r │ ├── ts_utils.r │ ├── utils.r │ └── vis.ports.r ├── TimeSeries.py ├── VCS.py ├── __init__.py ├── cli.py ├── cluster │ ├── PersonInfo.py │ ├── __init__.py │ ├── cluster.py │ ├── codeBlock.py │ ├── codeLine.py │ └── idManager.py ├── commit.py ├── commit_analysis.py ├── configuration.py ├── conway.py ├── dbmanager.py ├── doxygen.conf ├── fileCommit.py ├── kerninfo.py ├── linktype.py ├── logger.py ├── perl │ └── create_report.pl ├── project.py ├── runCli.py ├── sourceAnalysis.py ├── test │ ├── __init__.py │ ├── integration │ │ ├── __init__.py │ │ ├── example_projects.py │ │ ├── gitproject.py │ │ ├── test_exampleprojects.py │ │ ├── test_features.py │ │ └── test_logger.py │ └── unit │ │ ├── __init__.py │ │ ├── test_R_code.py │ │ ├── test_batchjob.py │ │ ├── test_cli.py │ │ ├── test_cluster.py │ │ ├── test_configuration.py │ │ ├── test_cppstats_works.py │ │ ├── test_getFeatureLines.py │ │ └── test_logger.py ├── ts.py └── util.py ├── codeface_testing.conf ├── conf ├── activemq.conf ├── allura.conf ├── ambari.conf ├── ansible.conf ├── apache_httpd.conf ├── apex.conf ├── bootstrap.conf ├── busybox.conf ├── camel.conf ├── cassandra.conf ├── clang.conf ├── cloudstack.conf ├── cocoon.conf ├── codeface.conf ├── cordova-ios.conf ├── coreutils.conf ├── couchdb.conf ├── d.conf ├── embb.conf ├── ffmpeg.conf ├── flink.conf ├── geode.conf ├── geronimo.conf ├── git.conf ├── groovy.conf ├── hadoop.conf ├── hbase.conf ├── hive.conf ├── ignite.conf ├── ivy.conf ├── jailhouse.conf ├── jquery.conf ├── kafka.conf ├── karaf.conf ├── kudu.conf ├── libcloud.conf ├── libressl.conf ├── linux-kernel.conf ├── linuxptp.conf ├── llvm.conf ├── lucene.conf ├── lucenenet.conf ├── mahout.conf ├── mesos.conf ├── openssl.conf ├── php.conf ├── qemu.conf ├── qpid-cpp.conf ├── qt.conf ├── rails.conf ├── reef.conf ├── rtems.conf ├── samba.conf ├── sentry.conf ├── spark.conf ├── sqlite.conf ├── storm.conf ├── subversion.conf ├── thrift.conf ├── toybox.conf ├── trafficserver.conf ├── u-boot.conf ├── wicket.conf ├── xalanc.conf ├── zephyr.conf └── zeppelin.conf ├── datamodel ├── .gitignore ├── codeface.mwb ├── codeface_schema.sql └── howto.txt ├── docs ├── README.manual.md ├── analysis.md ├── develop.md └── webserver.md ├── experiments ├── adist.py ├── analysis.r ├── cdist.py └── interactive.py ├── id_service ├── id_service.js ├── logger.js ├── package.json ├── start_id_service.sh └── test.py ├── integration-scripts ├── README.md ├── install_codeface_R.sh ├── install_codeface_node.sh ├── install_codeface_python.sh ├── install_common.sh ├── install_cppstats.sh ├── install_repositories.sh ├── setup_database.sh └── test_codeface.sh ├── log ├── dummy └── shiny-server │ └── dummy ├── nginx.conf ├── nginx.shinyserver.conf ├── packages.r ├── patches ├── README └── b4j │ ├── 0001-Support-author-name-tracking-for-b4j.patch │ ├── 0002-Set-plain-text-names-for-reporter-assignee-and-autho.patch │ └── 0003-Augment-b4j-version-with-special-string-to-indicate-.patch ├── performance ├── eval_performance.r ├── perf_meas.sh └── scale.sh ├── python_requirements.txt ├── setup.py ├── shiny-server-pack.sh ├── shiny-server.config ├── shiny-server.sh ├── test_copyright.sh ├── test_graphs.sh ├── timeseries.txt └── understand.txt /.Rprofile: -------------------------------------------------------------------------------- 1 | ## Default repo 2 | local({r <- getOption("repos"); 3 | r["CRAN"] <- "http://cran.r-project.org"; options(repos=r)}) 4 | 5 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.sh text eol=lf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | *.pyc 3 | *.pdf 4 | *.eps 5 | *.log 6 | *.aux 7 | *.ps 8 | *.orig 9 | *.rej 10 | *.save 11 | *.db 12 | *.rda 13 | *.Rout 14 | *.diff 15 | .vagrant/ 16 | */#* 17 | .Rhistory 18 | .RData 19 | .DS_Store 20 | *.tar.bz2 21 | error.dump.rda 22 | node-* 23 | codeface.egg-info/ 24 | log/ 25 | auto/ 26 | db/ 27 | rep/ 28 | res/ 29 | tmp/ 30 | testdat/ 31 | performance/results/ 32 | *.tar.gz 33 | .idea/ 34 | id_service/node_modules/ 35 | *.Rproj 36 | .Rproj.user/ 37 | .Rproj.user 38 | build/ 39 | dist/ 40 | vendor/ 41 | .coverage 42 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | dist: trusty 3 | 4 | before_install: 5 | - sudo rm -rf ~/.gnupg 6 | - sudo integration-scripts/install_repositories.sh 7 | # TravisCI installs MySQL 5.6 on trusty containers by default, but 8 | # the 'mysql-server' (and any analogous) Ubuntu package installs 9 | # version 5.5. To prevent breakage with our default installation 10 | # scripts, we downgrade MySQL to version 5.5. 11 | # For more information, see here: https://docs.travis-ci.com/user/build-environment-updates/2015-04-09/#Downgrading-MySQL-to-5.5.41 12 | - sudo rm -f /etc/apt/sources.list.d/mysql.list 13 | - sudo service mysql stop 14 | - sudo rm -rf /var/lib/mysql 15 | - sudo apt-get remove apparmor 16 | - sudo apt-get remove --purge mysql-common mysql-client libmysqlclient18 libmysqlclient-dev mysql-server 17 | - sudo apt-get remove --purge '^mysql*' 'libmysql*' 18 | - sudo apt-get autoremove 19 | - sudo apt-get autoclean 20 | - sudo apt-get install mysql-client-5.5 mysql-server-5.5 21 | - mysql -u root -e "CREATE USER 'travis'@'%' IDENTIFIED BY ''" 22 | - mysql -u root -e "CREATE USER 'travis'@'localhost' IDENTIFIED BY ''" 23 | - mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'travis'@'%'" 24 | - mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'travis'@'localhost'" 25 | install: 26 | - sudo integration-scripts/install_common.sh 27 | - travis_wait 40 sudo integration-scripts/install_codeface_R.sh 28 | - sudo integration-scripts/install_codeface_python.sh 29 | - sudo integration-scripts/install_cppstats.sh 30 | - sudo integration-scripts/setup_database.sh 31 | - integration-scripts/install_codeface_node.sh 32 | script: 33 | - integration-scripts/test_codeface.sh 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Installing and using Codeface 2 | 3 | ## Installing Codeface 4 | The recommended way to set up a Codeface instance is via 5 | vagrant. Clone the repository and run 6 | 7 | vagrant up 8 | 9 | to obtain a fully provisioned Codeface machine. Vagrant defaults to 10 | Virtualbox as provider, which may cause large performance impacts 11 | especially for I/O heavy tasks. You can /alternatively/ use 12 | 13 | vagrant up --provider=lxc 14 | 15 | if you have the corresponding LXC provider for vagrant installed on 16 | your system. To get shell access on the machine in each case, use 17 | 18 | vagrant ssh 19 | 20 | If vagrant is not yet installed on your system, please consult 21 | the corresponding [wiki page] (https://github.com/siemens/codeface/wiki/Runnning-codeface-with-Vagrant). 22 | 23 | ## Analysing Projects 24 | ### Concept 25 | Conceptually, work with Codeface is split in two stages: 26 | 27 | 1. Analyse projects using the batch-mode command line interface. See 28 | `analysis.md` for further details. Note that this process involves 29 | substantial amounts of git repo querying and data crunching, and can 30 | require several hours for large projects like the Linux kernel. 31 | 2. Inspect the results by visual analysis with the web frontend (see 32 | `webserver.md` for setup details), or by querying the database 33 | directly. See file `codeface/R/interactive.R` for exemplary instructions. 34 | 35 | ### Five Easy Steps to your First Analysis 36 | To perform an analysis of project qemu (a machine emulation software) 37 | and inspect the results in the interactive web frontend, run the 38 | following steps: 39 | 40 | 1. After bringing up the vagrant instance, `vagrant ssh` into the 41 | virtual machine 42 | 2. Start the ID service with `/vagrant/id_service/start_id_service.sh&` 43 | 3. Run an analysis of qemu with `/vagrant/analysis_example.sh` (this process 44 | may take a while to complete) 45 | 4. Start the webserver with `cd vagrant; ./shiny-server.sh` 46 | 5. Point your webserver on the host at [http://localhost:8081](http://localhost:8081) 47 | 48 | ## Status 49 | - ![](https://travis-ci.org/siemens/codeface.svg?branch=master) on master 50 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | # Copyright Roger Meier 5 | # SPDX-License-Identifier: Apache-2.0 BSD-2-Clause GPL-2.0+ MIT WTFPL 6 | 7 | $build = <