├── .github └── workflows │ ├── codeql-analysis.yml │ ├── dependabot.yml │ └── gw_comment_trigger.yml ├── .gitignore ├── .vscode ├── launch.json └── settings.json ├── BugPredict ├── BugSpots │ ├── README.md │ ├── bin │ │ └── bugspots │ └── lib │ │ ├── bugspots.rb │ │ └── bugspots │ │ ├── scanner.rb │ │ └── version.rb ├── BugTool │ ├── .gitignore │ ├── README.md │ ├── app.js │ ├── package-lock.json │ ├── package.json │ └── views │ │ ├── commits.ejs │ │ ├── index.ejs │ │ ├── partials │ │ ├── footer.ejs │ │ └── header.ejs │ │ └── score.ejs └── gw.sh ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Chatbot ├── .gitignore ├── data_1 │ └── AQAvit.txt ├── data_2 │ └── 17203.txt ├── file.py └── myKeys.sh ├── LICENSE ├── MachineLearningPrototype ├── CHANGELOG.md ├── DLGitIssuesAnalysis.ipynb ├── Deployment │ └── deployment.py ├── README.md ├── data │ ├── GitHubData │ │ ├── IssueContent │ │ │ ├── aqa-tests-1768.txt │ │ │ └── openj9_11733.txt │ │ └── IssueContentQuote │ │ │ ├── aqa-tests-1768.txt │ │ │ └── openj9_11733_quotes.txt │ ├── JenkinsData │ │ ├── aqa-tests_1768_jenkinsData.txt │ │ └── openj9_11733_httpsci.adoptopenjdk.netjobTest_openjdk15_j9_extended.functional_x86-64_linux64_testDDRExt_Class_0.txt │ └── JenkinsDataWithFeedback │ │ └── README.md ├── dataCollection │ ├── collect_data.py │ └── config.json ├── models │ └── non-contextual │ │ ├── doc2vec.ipynb │ │ ├── doc2vec │ │ ├── doc2vec.ipynb │ │ └── executions_df │ │ ├── executions_df │ │ └── lda │ │ └── lda.ipynb └── utils │ └── preprocess_data.py ├── PerfNext ├── .gitignore ├── README.md ├── app.js ├── app │ └── apis │ │ ├── BenchEngine │ │ └── parser.js │ │ ├── benchmark_data.js │ │ ├── builds.js │ │ ├── common.js │ │ ├── deprecated.js │ │ ├── jenkins.js │ │ └── machines.js ├── config │ ├── benchmarks │ │ ├── buckets_all.xml │ │ ├── buckets_metric.xml │ │ ├── buckets_simple.xml │ │ └── data_simple │ │ │ ├── Crypto.xml │ │ │ ├── Liberty.xml │ │ │ ├── ODM.xml │ │ │ ├── SPEC.xml │ │ │ ├── SPECjvm2008.xml │ │ │ └── Spark.xml │ └── cache │ │ └── .gitignore ├── logo.txt ├── machines │ ├── master_machine_list.xsd │ └── template_master_machine_list.xml ├── manifest.yml ├── package-lock.json ├── package.json ├── public │ ├── README.md │ ├── index.html │ ├── lib │ │ ├── css │ │ │ ├── perf-launcher.css │ │ │ └── terminal.css │ │ └── js │ │ │ ├── benchmarks-simple.js │ │ │ ├── benchmarks.js │ │ │ ├── jobOutput.js │ │ │ └── util.js │ ├── pages │ │ ├── index.html │ │ ├── result.html │ │ ├── schedule-simple.html │ │ └── schedule.html │ └── temp-chart-data │ │ └── morris-data.js ├── script_header.sh └── setup.sh ├── README.md ├── SmartMedia ├── README.md ├── SmartMediaClient │ ├── .gitignore │ ├── index.html │ ├── package-lock.json │ ├── package.json │ ├── server.js │ └── src │ │ ├── App.js │ │ └── index.js └── SmartMediaServer │ ├── .gitignore │ ├── ArgParser.js │ ├── getGitCloneInfo.js │ ├── getSearchTweets.js │ ├── index.js │ ├── package-lock.json │ └── package.json ├── TestResultSummaryService ├── .dockerignore ├── .gitignore ├── .prettierrc.json ├── ArgParser.js ├── BuildMonitor.js ├── BuildProcessor.js ├── DashboardBuildInfo.json ├── DataManager.js ├── Database.js ├── Dockerfile ├── EventHandler.js ├── JenkinsApiQuery.js ├── JenkinsInfo.js ├── LogStream.js ├── README.md ├── Utils.js ├── backend.js ├── build.gradle ├── data │ ├── Dockerfile │ └── sampleData.gz ├── frontend.js ├── jenkins │ └── trssCodeSync.groovy ├── nginx │ ├── Dockerfile │ ├── nginx.conf │ └── nginx_prod.conf ├── package-lock.json ├── package.json ├── parsers │ ├── BenchmarkMetric.js │ ├── BenchmarkParser.js │ ├── Build.js │ ├── Default.js │ ├── ExternalTestParser.js │ ├── JCK.js │ ├── ParentBuild.js │ ├── Parser.js │ ├── Tap.js │ ├── Test.js │ ├── TestBenchmarkParser.js │ ├── Utils.js │ └── index.js ├── perf │ ├── BenchmarkMathCalculation.js │ └── DataManagerAggregate.js ├── plugins │ ├── DataManagerPerf.js │ ├── README.md │ ├── examplePlugin.js │ └── index.js ├── routes │ ├── compareTestDuration.js │ ├── compareTestsOutput.js │ ├── deleteBuildData.js │ ├── deleteBuildListById.js │ ├── deleteBuildsAndChildrenByFields.js │ ├── deleteCollection.js │ ├── deleteUnusedOutput.js │ ├── getAllChildBuilds.js │ ├── getAllTestsWithHistory.js │ ├── getApplicationTests.js │ ├── getAuditLogs.js │ ├── getAzDoRun.js │ ├── getBenchmarkMetricProps.js │ ├── getBuildHistory.js │ ├── getBuildList.js │ ├── getBuildStages.js │ ├── getChildBuilds.js │ ├── getDashboardBuildInfo.js │ ├── getData.js │ ├── getErrorInOutput.js │ ├── getFeedbackUrl.js │ ├── getHistoryPerTest.js │ ├── getJenkins.js │ ├── getLastBuildInfo.js │ ├── getLogStream.js │ ├── getOutputById.js │ ├── getOutputByTestInfo.js │ ├── getParentSpecificData.js │ ├── getParents.js │ ├── getPerffarmRunCSV.js │ ├── getSpecificData.js │ ├── getTabularData.js │ ├── getTabularDropdown.js │ ├── getTestAvgDuration.js │ ├── getTestBuildsByMachine.js │ ├── getTestById.js │ ├── getTestBySearch.js │ ├── getTestByTestName.js │ ├── getTestByVersionInfo.js │ ├── getTestInfoByBuildInfo.js │ ├── getTestNames.js │ ├── getTestPerPlatform.js │ ├── getTopLevelBuildNames.js │ ├── getTotals.js │ ├── getTrafficLightData.js │ ├── index.js │ ├── jwt │ │ ├── register.js │ │ └── verify.js │ ├── parseJenkinsUrl.js │ ├── populateDB.js │ ├── postIssueFeedback.js │ ├── postTapFiles.js │ ├── rescanBuild.js │ ├── test │ │ ├── getJenkinsBuildInfo.js │ │ ├── jobOutput.txt │ │ ├── testParserViaFile.js │ │ └── testParserViaLogStream.js │ ├── updateComments.js │ ├── updateKeepForever.js │ ├── upsertBuildList.js │ └── utils │ │ ├── applyDeepSmithMatch.js │ │ └── removeTimestamp.js └── scripts │ └── deployment.sh ├── TriagerXChatbot ├── .gitignore ├── README.md ├── main.py ├── requirements.txt └── startup.sh ├── TriagerXServer ├── .dockerignore ├── .gitignore ├── README.md ├── dockerfile ├── gunicorn.conf.py ├── main.py ├── models.py └── requirements.txt ├── Tweetest ├── .gitignore ├── index.js ├── package-lock.json └── package.json ├── doc ├── README.md ├── diagrams │ └── aqaTestToolsRoadmap.jpg ├── images │ └── deep_aqatik_design.png └── presentations │ ├── Deep_AQATik.pdf │ └── Deep_AQATik.pptx ├── docker-compose.yml ├── exportMongo.sh ├── netlify.toml ├── package-lock.json ├── package.json └── test-result-summary-client ├── .dockerignore ├── .gitignore ├── .npmrc ├── .prettierrc.json ├── Dockerfile ├── README.md ├── build.bat ├── config-overrides.js ├── cypress.json ├── cypress └── integration │ ├── byPipeline.js │ └── testInfo.js ├── package-lock.json ├── package.json ├── public ├── _redirects ├── favicon.ico ├── index.html └── manifest.json └── src ├── AdoptiumLogo.svg ├── AdvancedSearch ├── AdvancedSearch.jsx ├── InputAutoComplete.jsx ├── InputSelect.jsx └── index.js ├── App.css ├── App.jsx ├── Build ├── AlertMsg.jsx ├── AllTestsInfo.jsx ├── BuildDetail.jsx ├── BuildLink.jsx ├── BuildTable.jsx ├── BuildTreeView.jsx ├── Builds.jsx ├── DeepHistory.jsx ├── Duration.jsx ├── GitNewIssue.jsx ├── Output │ ├── Artifacts.jsx │ ├── Output.jsx │ ├── index.js │ └── output.css ├── PossibleIssues.jsx ├── ReleaseSummary.jsx ├── Summary │ ├── BuildStatus.jsx │ ├── BuildStatusIcon.jsx │ ├── Checkboxes.jsx │ ├── Graph.css │ ├── Overview.css │ ├── Overview.jsx │ ├── PieChart.js │ ├── ResultGrid.css │ ├── ResultGrid.jsx │ └── ResultSummary.jsx ├── TestBreadcrumb.jsx ├── TestPerPlatform.jsx ├── TestTable.jsx ├── TopLevelBuildTable.jsx ├── TopLevelBuilds.jsx ├── index.js └── table.css ├── Components ├── Button.jsx └── ShowWhenVisible.jsx ├── Dashboard ├── Dashboard.jsx ├── Defaults.js ├── TabInfo.jsx ├── ToolBar.jsx ├── WidgetWrapper.jsx ├── Widgets │ ├── BuildStatus │ │ ├── BuildStatus.jsx │ │ ├── ServerSelector.jsx │ │ └── index.js │ ├── DateRangePickers.css │ ├── DateRangePickers.jsx │ ├── Graph │ │ ├── AcmeairNodejs.jsx │ │ ├── ChartComponent │ │ │ └── StockChart.jsx │ │ ├── Dacapo.jsx │ │ ├── DayTrader7.jsx │ │ ├── ODM.jsx │ │ ├── Renaissance.jsx │ │ ├── SPECjbb2015.jsx │ │ ├── index.js │ │ └── utils.js │ ├── Settings.jsx │ └── index.js ├── dashboard.css └── index.js ├── ErrorBoundary.jsx ├── PerfCompare ├── PerfCompare.css ├── PerfCompare.jsx ├── index.js └── lib │ ├── AzDoRunJSON.js │ ├── BenchmarkMath.js │ ├── ExtractRelevantJenkinsTestResults.js │ └── PerffarmRunJSON.js ├── Search ├── SearchBuildResult.jsx ├── SearchOutput.jsx ├── SearchResult.jsx ├── SearchTestResult.jsx └── index.js ├── Settings ├── Settings.jsx ├── index.js └── settings.css ├── TabularView ├── TabularView.css ├── TabularView.jsx ├── TabularViewConfig.json └── index.js ├── TestCompare ├── TestCompare.jsx ├── TestInfo.jsx └── index.js ├── ThirdPartyAppView ├── ThirdPartyAppView.jsx └── index.js ├── TrafficLight ├── MetricsDetails.jsx ├── MetricsTable.jsx ├── TrafficLight.jsx └── index.js ├── index.css ├── index.js └── utils ├── BenchmarkMathCalculation.js ├── LocalStorage.js ├── TableUtils.jsx ├── TextFilter.jsx ├── Utils.js └── query.js /.github/workflows/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | open-pull-requests-limit: 10 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # misc 2 | .project 3 | .settings 4 | .DS_Store 5 | .gradle/ 6 | __pycache__/ 7 | GitHubData/ 8 | JenkinsData/ 9 | JenkinsDataWithFeedback/ 10 | mongo 11 | TempData/ 12 | deployenv/ 13 | *.joblib 14 | *.iml 15 | .idea 16 | node_modules 17 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "type": "node", 6 | "request": "launch", 7 | "name": "TRSS Server", 8 | "skipFiles": ["/**"], 9 | "cwd": "${workspaceFolder}/TestResultSummaryService", 10 | "runtimeExecutable": "npm", 11 | "runtimeArgs": ["start"] 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.defaultFormatter": "esbenp.prettier-vscode", 4 | "[javascript]": { 5 | "editor.defaultFormatter": "esbenp.prettier-vscode" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /BugPredict/BugSpots/README.md: -------------------------------------------------------------------------------- 1 | This is a Ruby script, using Google's openSource bugspots tool 2 | 3 | # Running Instructions 4 | cd bin 5 | ./bugspots -b {branchname} {path to local repo} 6 | 7 | This will update the database, with FileName, Score associated with the file, array of commit messages associated with the file, Date file was run 8 | -------------------------------------------------------------------------------- /BugPredict/BugSpots/lib/bugspots.rb: -------------------------------------------------------------------------------- 1 | require "bugspots/version" 2 | require "bugspots/scanner" -------------------------------------------------------------------------------- /BugPredict/BugSpots/lib/bugspots/scanner.rb: -------------------------------------------------------------------------------- 1 | require "rugged" 2 | 3 | module Bugspots 4 | 5 | Fix = Struct.new(:message, :date, :files) 6 | Spot = Struct.new(:file, :score) 7 | # Commit = Struct.new(:message, :date) 8 | 9 | def self.scan(repo, branch = "openj", depth = nil, regex = nil) 10 | regex ||= /\b(fix(es|ed)?|close(s|d)?)\b/i 11 | fixes = [] 12 | 13 | repo = Rugged::Repository.new(repo) 14 | unless repo.branches.each_name(:local).sort.find { |b| b == branch } 15 | raise ArgumentError, "no such branch in the repo: #{branch}" 16 | end 17 | 18 | walker = Rugged::Walker.new(repo) 19 | walker.sorting(Rugged::SORT_TOPO) 20 | walker.push(repo.branches[branch].target) 21 | walker = walker.take(depth) if depth 22 | walker.each do |commit| 23 | #puts "#{commit.diff(commit.parents.first).deltas}" 24 | if commit.message.scrub =~ regex 25 | files = commit.diff(commit.parents.first).deltas.collect do |d| 26 | d.old_file[:path] 27 | end 28 | fixes << Fix.new(commit.message.scrub.split("\n").first, commit.time, files) 29 | end 30 | end 31 | 32 | hotspots = Hash.new(0) 33 | commits = Hash.new([]) 34 | currentTime = Time.now 35 | oldest_fix_date = fixes.last.date 36 | fixes.each do |fix| 37 | fix.files.each do |file| 38 | # The timestamp used in the equation is normalized from 0 to 1, where 39 | # 0 is the earliest point in the code base, and 1 is now (where now is 40 | # when the algorithm was run). Note that the score changes over time 41 | # with this algorithm due to the moving normalization; it's not meant 42 | # to provide some objective score, only provide a means of comparison 43 | # between one file and another at any one point in time 44 | t = 1 - ((currentTime - fix.date).to_f / (currentTime - oldest_fix_date)) 45 | hotspots[file] += 1/(1+Math.exp((-12*t)+12)) 46 | commits[file] += [{'message':fix.message, 'date':fix.date}] 47 | end 48 | end 49 | spots = hotspots.sort_by {|k,v| v}.reverse.collect do |spot| 50 | Spot.new(spot.first, sprintf('%.4f', spot.last)) 51 | end 52 | return fixes, spots, commits 53 | end 54 | end -------------------------------------------------------------------------------- /BugPredict/BugSpots/lib/bugspots/version.rb: -------------------------------------------------------------------------------- 1 | module Bugspots 2 | VERSION = "0.2.1" 3 | end 4 | -------------------------------------------------------------------------------- /BugPredict/BugTool/.gitignore: -------------------------------------------------------------------------------- 1 | # misc 2 | .project 3 | .settings 4 | .DS_Store 5 | /node_modules 6 | -------------------------------------------------------------------------------- /BugPredict/BugTool/README.md: -------------------------------------------------------------------------------- 1 | # Running Instructions 2 | npm install 3 | node app.js 4 | 5 | The tool will display the top 10 "hotspots". To look at the commit messages associated with the file, click on the bar representing the file. 6 | To look at a file's "score" history, type in the full path of the file in the search box to get past 5 scores. 7 | -------------------------------------------------------------------------------- /BugPredict/BugTool/app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var bodyParser = require('body-parser'); 3 | var path = require('path'); 4 | var expressValidator = require('express-validator'); 5 | 6 | var d3nBar = require('d3node-barchart'); 7 | 8 | var app = express(); 9 | var exec = require('child_process').exec; 10 | var MongoClient = require('mongodb').MongoClient; 11 | 12 | //View Engine 13 | app.set('view engine', 'ejs'); 14 | app.set('views', path.join(__dirname, 'views')); 15 | 16 | //body parser middle ware 17 | app.use(bodyParser.json()); 18 | app.use(bodyParser.urlencoded({extented: false})); 19 | app.use(bodyParser.json({ type: 'application/*+json' })); 20 | 21 | //Set static Path 22 | app.use(express.static(path.join(__dirname, 'public'))) 23 | 24 | //Global Vars 25 | app.use(function(req,res,next){ 26 | res.locals.result = null; 27 | next(); 28 | }); 29 | 30 | 31 | app.get('/commits', function (req, res){ 32 | //console.log(req.query.commits); 33 | //var c = req.query.commits.split(',') 34 | 35 | res.render('commits' , { 36 | commits: req.query.commits, 37 | fileName: req.query.fileName 38 | }) 39 | 40 | }); 41 | 42 | app.post('/getScore', function (req, res){ 43 | var ans; 44 | 45 | MongoClient.connect('mongodb://127.0.0.1:27017/test', function (err, db) { 46 | if (err) throw err 47 | db.collection("testTable").find( { File: req.body.file_name }).sort({Date: -1}).limit(5).toArray(function(err, result){ 48 | if (err) throw err 49 | for (var i= 0; i < result.length; i++){ 50 | console.log(result[i].Date) 51 | 52 | } 53 | res.render('score.ejs', { 54 | result: result, 55 | file_name: req.body.file_name 56 | }); 57 | 58 | }); 59 | 60 | }); 61 | 62 | 63 | }); 64 | 65 | 66 | app.get('/', function (req, res) { 67 | // If it's not showing up, just use req.body to see what is actually being passed. 68 | //var dirPath = req.body.dirPath; 69 | //var branchName = req.body.branchName; 70 | 71 | //var myCommand = '../bugspots/bin/bugspots ' + '-b openj9 /Users/linaserry/Documents/work/openj9-openjdk-jdk9' ; 72 | 73 | //exec(myCommand,function (error, stdout, stderr) { console.log('error: ' + error); }); 74 | 75 | 76 | MongoClient.connect('mongodb://127.0.0.1:27017/test', function (err, db) { 77 | if (err) throw err 78 | 79 | db.collection("testTable").find({}, {File: 1, Score: 1, Date: 1, Commits: 1, _id: 0 }).limit(10).toArray(function (err, result) { 80 | if (err) throw err; 81 | 82 | res.render('index' , { 83 | result : result 84 | }); 85 | }) 86 | }) 87 | 88 | 89 | }); 90 | 91 | app.listen(3000, function(){ 92 | console.log("Server Started on Port 3000 .... "); 93 | }) -------------------------------------------------------------------------------- /BugPredict/BugTool/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bugtool", 3 | "version": "1.0.0", 4 | "description": "Bug prediction tool", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "dependencies": { 10 | "body-parser": "^1.20.3", 11 | "d3node-barchart": "0.0.6", 12 | "ejs": "^3.1.10", 13 | "express": "^4.21.2", 14 | "express-validator": "^4.3.0", 15 | "git-clone": "^0.1.0", 16 | "highcharts": "^9.0.0", 17 | "mongodb": "^3.1.13" 18 | }, 19 | "author": "", 20 | "license": "Apache License Version 2.0" 21 | } 22 | -------------------------------------------------------------------------------- /BugPredict/BugTool/views/commits.ejs: -------------------------------------------------------------------------------- 1 | <% include partials/header %> 2 | 3 | 4 | 5 | 6 | 7 |

Commits for <%=fileName%>

8 | 9 | 14 | 15 | <% if(commits != undefined){ %> 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | <% commits.forEach(function(r){ %> 24 | 25 | 28 | 29 | <% }) %> 30 | 31 |
Commit Messages
26 | <%=r%> 27 |
32 | <% } %> 33 | 34 | <% include partials/footer %> -------------------------------------------------------------------------------- /BugPredict/BugTool/views/partials/footer.ejs: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /BugPredict/BugTool/views/partials/header.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | Bug Prediction 4 | 5 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to aqa-test-tools 2 | 3 | Thanks for your interest in this project. 4 | 5 | ## Project description 6 | 7 | aqa-test-tools is a project that contains a set of tools for monitoring and reporting AQA 8 | and other tests from a variety of CI systems. 9 | 10 | * https://github.com/adoptium/aqa-test-tools 11 | 12 | ## Developer resources 13 | 14 | The project maintains the following source code repositories 15 | 16 | * https://github.com/adoptium/aqa-test-tools 17 | 18 | ## Eclipse Contributor Agreement 19 | 20 | Before your contribution can be accepted by the project team contributors must 21 | electronically sign the Eclipse Contributor Agreement (ECA). 22 | 23 | * http://www.eclipse.org/legal/ECA.php 24 | 25 | Commits that are provided by non-committers must have a Signed-off-by field in 26 | the footer indicating that the author is aware of the terms by which the 27 | contribution has been provided to the project. The non-committer must 28 | additionally have an Eclipse Foundation account and must have a signed Eclipse 29 | Contributor Agreement (ECA) on file. 30 | 31 | For more information, please see the Eclipse Committer Handbook: 32 | https://www.eclipse.org/projects/handbook/#resources-commit 33 | 34 | ## Contact 35 | 36 | Contact the Eclipse Foundation Webdev team via webdev@eclipse-foundation.org. 37 | -------------------------------------------------------------------------------- /Chatbot/.gitignore: -------------------------------------------------------------------------------- 1 | ./myKeys.sh 2 | storage -------------------------------------------------------------------------------- /Chatbot/file.py: -------------------------------------------------------------------------------- 1 | from llama_index import GPTVectorStoreIndex, SimpleDirectoryReader 2 | from llama_index import StorageContext, load_index_from_storage 3 | import os 4 | 5 | dataDir = 'data_2' 6 | storageDir = "./storage" 7 | try: 8 | storage_content = StorageContext.from_defaults(persist_dir=storageDir) 9 | print("loaded from persist data: ", storageDir) 10 | index = load_index_from_storage(storage_content) 11 | except: 12 | documents = SimpleDirectoryReader(dataDir).load_data() 13 | print("loaded from data: ", dataDir) 14 | index = GPTVectorStoreIndex.from_documents(documents) 15 | index.storage_context.persist() 16 | 17 | query_engine = index.as_query_engine() 18 | 19 | # question = "Which companies joined Adoptium?" 20 | question = "Please give a summary?" 21 | # question = "Could you suggest a fix?" 22 | # question = "What is the next step I should take to fix this defect?" 23 | print(question) 24 | response = query_engine.query(question) 25 | print(response) -------------------------------------------------------------------------------- /Chatbot/myKeys.sh: -------------------------------------------------------------------------------- 1 | # export OPENAI_API_KEY= 2 | # export GITHUB_TOKEN= 3 | 4 | python3 file.py -------------------------------------------------------------------------------- /MachineLearningPrototype/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 5 | and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). 6 | 7 | ## [1.0.1] - 2022-07-28 8 | ### Added 9 | - preprocess_data.py boolean on create_models_datasets function 10 | 11 | ## [1.0.0] - 2022-07-06 12 | ### Added 13 | - doc2vec.ipynb for the PoC of Doc2vec model 14 | ### Modified 15 | - preprocess_data.py to reuse code from DLGitIssuesAnalysis.ipynb 16 | 17 | 18 | -------------------------------------------------------------------------------- /MachineLearningPrototype/README.md: -------------------------------------------------------------------------------- 1 | # Deep AQAtik Project 2 | Deep AQAtik project aims at enhancing functions in Test Result Summary Service (TRSS) with machine learning technology. 3 | 4 | ## Prerequisites 5 | - [Python 3](https://www.python.org/doc/) 6 | 7 | ## Local run/development steps 8 | Execute the following commands after installing python 3 and cloning the repository: 9 | 10 | - navigate to the folder 11 | ``` 12 | cd to aqa-test-tools/MachineLearningPrototype/Deployment folder 13 | ``` 14 | 15 | - (first time only) create an [environment](https://flask.palletsprojects.com/en/1.1.x/installation/#create-an-environment) with required packages 16 | ``` 17 | python3 -m venv deployenv 18 | ``` 19 | 20 | - activate the environment 21 | ``` 22 | source deployenv/bin/activate 23 | ``` 24 | 25 | - (first time only) install required packages 26 | ``` 27 | pip install wheel 28 | pip install gunicorn flask 29 | pip install flask_cors numpy pandas sklearn joblib 30 | ``` 31 | 32 | - start Flask development server 33 | ``` 34 | export FLASK_APP=deployment.py 35 | flask run 36 | ``` 37 | 38 | User can navigate at http://127.0.0.1:5000 39 | 40 | Note: 41 | - stop the server by pressing CTRL+C 42 | - quit the environment use `deactivate` 43 | 44 | 45 | ## Production server 46 | https://trssml.adoptopenjdk.net/ (unavailable now) 47 | 48 | ### Deployment Instructions 49 | - on TRSS production server machine with `jenkins` user, cd to source code folder and update the code 50 | ``` 51 | cd /home/jenkins/aqa-test-tools 52 | git pull 53 | ``` 54 | 55 | - if new package is added, install it 56 | ``` 57 | cd MachineLearningPrototype/Deployment 58 | source deployenv/bin/activate 59 | pip install ${new_package_name} 60 | ``` 61 | 62 | - restart the service 63 | ``` 64 | sudo systemctl restart deployment 65 | ``` 66 | 67 | - log message can be found by using the following cmd 68 | ``` 69 | sudo journalctl -u deployment 70 | ``` 71 | -------------------------------------------------------------------------------- /MachineLearningPrototype/data/GitHubData/IssueContent/aqa-tests-1768.txt: -------------------------------------------------------------------------------- 1 | **Describe the bug** 2 | 3 | JVM mode tests are failing to launch due to issues with docker. From the output, I'm not clear if the parameters are incorrect (`DOCKERIMAGE_TAG`) or the box needs to login to a specific registry? 4 | 5 | Output: 6 | ``` 7 | 11:17:02 Unable to recognize DOCKER_OS from DOCKERIMAGE_TAG = --version! 8 | 11:17:02 Unable to find image 'adoptopenjdk-derby-test:11-jdk-ubuntu-openj9-full' locally 9 | 11:17:03 docker: Error response from daemon: pull access denied for adoptopenjdk-derby-test, repository does not exist or may require 'docker login'. 10 | ``` 11 | 12 | **To Reproduce** 13 | Look at the output from one of the recent extended external tests 14 | ie: https://ci.adoptopenjdk.net/job/Test_openjdk11_j9_extended.external_ppc64le_linux_quarkus/ 15 | 16 | **Expected behavior** 17 | Tests run =) 18 | 19 | **Additional context** 20 | All extended external quarkus testing: https://ci.adoptopenjdk.net/view/Test_external_weekly/search/?q=quarkus&Jenkins-Crumb=a641a495ab24a32df0acfed743a5be4ea8142dcf58b19aabc754ef73c5df2257 21 | 22 | This is an issue for both OpenJ9 and Hotspot based testing across all platforms. -------------------------------------------------------------------------------- /MachineLearningPrototype/data/GitHubData/IssueContentQuote/aqa-tests-1768.txt: -------------------------------------------------------------------------------- 1 | 11:17:02 Unable to recognize DOCKER_OS from DOCKERIMAGE_TAG = --version! 2 | 11:17:02 Unable to find image 'adoptopenjdk-derby-test:11-jdk-ubuntu-openj9-full' locally 3 | 11:17:03 docker: Error response from daemon: pull access denied for adoptopenjdk-derby-test, repository does not exist or may require 'docker login'. -------------------------------------------------------------------------------- /MachineLearningPrototype/data/JenkinsDataWithFeedback/README.md: -------------------------------------------------------------------------------- 1 | This folder is to store Jenkins test output files, which have been evaluated ML model possible issue suggestion by users. -------------------------------------------------------------------------------- /MachineLearningPrototype/dataCollection/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "trss_servers": ["https://trss.adoptium.net"] 3 | } -------------------------------------------------------------------------------- /MachineLearningPrototype/models/non-contextual/doc2vec/executions_df: -------------------------------------------------------------------------------- 1 | algorithm,dimension,window,epoch,f1score,accuracy,precision,recall 2 | PV-DM,50,2,20,0.3,0.176,1.0,0.176 3 | PV-DBOW,50,2,20,0.381,0.235,1.0,0.235 4 | PV-DM,50,4,20,0.3,0.176,1.0,0.176 5 | PV-DBOW,50,4,20,0.381,0.235,1.0,0.235 6 | PV-DM,50,6,20,0.381,0.235,1.0,0.235 7 | PV-DBOW,50,6,20,0.381,0.235,1.0,0.235 8 | PV-DM,50,8,20,0.3,0.176,1.0,0.176 9 | PV-DBOW,50,8,20,0.381,0.235,1.0,0.235 10 | PV-DM,50,10,20,0.381,0.235,1.0,0.235 11 | PV-DBOW,50,10,20,0.3,0.176,1.0,0.176 12 | PV-DM,100,2,20,0.381,0.235,1.0,0.235 13 | PV-DBOW,100,2,20,0.522,0.353,1.0,0.353 14 | PV-DM,100,4,20,0.455,0.294,1.0,0.294 15 | PV-DBOW,100,4,20,0.522,0.353,1.0,0.353 16 | PV-DM,100,6,20,0.381,0.235,1.0,0.235 17 | PV-DBOW,100,6,20,0.455,0.294,1.0,0.294 18 | PV-DM,100,8,20,0.381,0.235,1.0,0.235 19 | PV-DBOW,100,8,20,0.522,0.353,1.0,0.353 20 | PV-DM,100,10,20,0.381,0.235,1.0,0.235 21 | PV-DBOW,100,10,20,0.583,0.412,1.0,0.412 22 | PV-DM,200,2,20,0.522,0.353,1.0,0.353 23 | PV-DBOW,200,2,20,0.583,0.412,1.0,0.412 24 | PV-DM,200,4,20,0.455,0.294,1.0,0.294 25 | PV-DBOW,200,4,20,0.522,0.353,1.0,0.353 26 | PV-DM,200,6,20,0.381,0.235,1.0,0.235 27 | PV-DBOW,200,6,20,0.522,0.353,1.0,0.353 28 | PV-DM,200,8,20,0.455,0.294,1.0,0.294 29 | PV-DBOW,200,8,20,0.583,0.412,1.0,0.412 30 | PV-DM,200,10,20,0.381,0.235,1.0,0.235 31 | PV-DBOW,200,10,20,0.522,0.353,1.0,0.353 32 | PV-DM,300,2,20,0.522,0.353,1.0,0.353 33 | PV-DBOW,300,2,20,0.522,0.353,1.0,0.353 34 | PV-DM,300,4,20,0.455,0.294,1.0,0.294 35 | PV-DBOW,300,4,20,0.583,0.412,1.0,0.412 36 | PV-DM,300,6,20,0.381,0.235,1.0,0.235 37 | PV-DBOW,300,6,20,0.522,0.353,1.0,0.353 38 | PV-DM,300,8,20,0.455,0.294,1.0,0.294 39 | PV-DBOW,300,8,20,0.522,0.353,1.0,0.353 40 | PV-DM,300,10,20,0.381,0.235,1.0,0.235 41 | PV-DBOW,300,10,20,0.583,0.412,1.0,0.412 42 | -------------------------------------------------------------------------------- /MachineLearningPrototype/models/non-contextual/executions_df: -------------------------------------------------------------------------------- 1 | algorithm,dimension,window,epoch,f1score,accuracy,precision,recall 2 | PV-DM,50,2,20,0.455,0.294,1.0,0.294 3 | PV-DBOW,50,2,20,0.455,0.294,1.0,0.294 4 | PV-DM,50,4,20,0.381,0.235,1.0,0.235 5 | PV-DBOW,50,4,20,0.522,0.353,1.0,0.353 6 | PV-DM,50,6,20,0.455,0.294,1.0,0.294 7 | PV-DBOW,50,6,20,0.522,0.353,1.0,0.353 8 | PV-DM,50,8,20,0.455,0.294,1.0,0.294 9 | PV-DBOW,50,8,20,0.455,0.294,1.0,0.294 10 | PV-DM,50,10,20,0.522,0.353,1.0,0.353 11 | PV-DBOW,50,10,20,0.455,0.294,1.0,0.294 12 | PV-DM,100,2,20,0.455,0.294,1.0,0.294 13 | PV-DBOW,100,2,20,0.522,0.353,1.0,0.353 14 | PV-DM,100,4,20,0.455,0.294,1.0,0.294 15 | PV-DBOW,100,4,20,0.522,0.353,1.0,0.353 16 | PV-DM,100,6,20,0.381,0.235,1.0,0.235 17 | PV-DBOW,100,6,20,0.583,0.412,1.0,0.412 18 | PV-DM,100,8,20,0.583,0.412,1.0,0.412 19 | PV-DBOW,100,8,20,0.522,0.353,1.0,0.353 20 | PV-DM,100,10,20,0.381,0.235,1.0,0.235 21 | PV-DBOW,100,10,20,0.583,0.412,1.0,0.412 22 | PV-DM,200,2,20,0.455,0.294,1.0,0.294 23 | PV-DBOW,200,2,20,0.522,0.353,1.0,0.353 24 | PV-DM,200,4,20,0.455,0.294,1.0,0.294 25 | PV-DBOW,200,4,20,0.583,0.412,1.0,0.412 26 | PV-DM,200,6,20,0.381,0.235,1.0,0.235 27 | PV-DBOW,200,6,20,0.583,0.412,1.0,0.412 28 | PV-DM,200,8,20,0.381,0.235,1.0,0.235 29 | PV-DBOW,200,8,20,0.583,0.412,1.0,0.412 30 | PV-DM,200,10,20,0.381,0.235,1.0,0.235 31 | PV-DBOW,200,10,20,0.583,0.412,1.0,0.412 32 | PV-DM,300,2,20,0.522,0.353,1.0,0.353 33 | PV-DBOW,300,2,20,0.522,0.353,1.0,0.353 34 | PV-DM,300,4,20,0.455,0.294,1.0,0.294 35 | PV-DBOW,300,4,20,0.583,0.412,1.0,0.412 36 | PV-DM,300,6,20,0.381,0.235,1.0,0.235 37 | PV-DBOW,300,6,20,0.583,0.412,1.0,0.412 38 | PV-DM,300,8,20,0.381,0.235,1.0,0.235 39 | PV-DBOW,300,8,20,0.583,0.412,1.0,0.412 40 | PV-DM,300,10,20,0.381,0.235,1.0,0.235 41 | PV-DBOW,300,10,20,0.583,0.412,1.0,0.412 42 | -------------------------------------------------------------------------------- /PerfNext/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | /bin/ 3 | /.apt_generated/ 4 | credentials.json 5 | .README.md.html 6 | .DS_Store 7 | APP_DATA.json 8 | -------------------------------------------------------------------------------- /PerfNext/app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var bodyParser = require('body-parser'); 3 | var app = express(); 4 | var appport = process.env.PORT || 8888; 5 | var path = require('path'); 6 | var fs = require('fs'); 7 | 8 | global.appRoot = path.resolve(__dirname); 9 | global.APP_DATA = JSON.parse(fs.readFileSync('config/APP_DATA.json', 'utf8')); 10 | 11 | /* Refer to PerfNext/README.md for Password Requirements */ 12 | global.credentials = JSON.parse(fs.readFileSync('config/credentials.json', 'utf8')); 13 | global.perffarmUsername = global.credentials.builds_server.username; 14 | global.perffarmEspressoPwd = global.credentials.builds_server.password; 15 | global.jenkinsUsername = global.credentials.jenkins_server.username; 16 | global.jenkinsPwd = global.credentials.jenkins_server.password; 17 | global.jenkinsToken = global.credentials.jenkins_server.jenkinsToken; 18 | 19 | //Middleware 20 | app.use(bodyParser.urlencoded({extended: false})); 21 | app.use(bodyParser.json()); 22 | 23 | //Save Raw Body of the request (We need it to get the XML string THAT we parse to JSON) 24 | app.use(function(req, res, next) { 25 | 26 | req.rawBody = ''; 27 | req.setEncoding('utf8'); 28 | 29 | req.on('data', function(chunk) { 30 | req.rawBody += chunk; 31 | }); 32 | 33 | req.on('end', function() { 34 | next(); 35 | }); 36 | }); 37 | 38 | app.use(express.static(__dirname + '/public')); 39 | 40 | //Include all the APIs (Must come after middleware declarations) 41 | require('./app/apis/jenkins')(app); 42 | require('./app/apis/deprecated')(app); 43 | require('./app/apis/benchmark_data')(app); 44 | require('./app/apis/machines')(app); 45 | require('./app/apis/builds')(app); 46 | require('./app/apis/BenchEngine/parser')(app); 47 | require('./app/apis/common')(app); 48 | 49 | 50 | app.get('/', function(req, res) { 51 | res.sendFile(__dirname + '/public/index.html'); 52 | }) 53 | 54 | app.listen(appport, function() { 55 | // Workaround: we currently get a certification error when requesting from Jenkins Instance 56 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 57 | console.log('Server Started.') 58 | }) -------------------------------------------------------------------------------- /PerfNext/app/apis/benchmark_data.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var DOMParser = require('xmldom').DOMParser; 3 | 4 | /* 5 | * These APIs expose the Benchmark data, they read the XML config files from appRoot/config and provide it to the consumer. 6 | */ 7 | 8 | module.exports = function(app) { 9 | 10 | /* 11 | * Retrieve the benchmark suits XML config file. This file specifies the various benchmark + variants, and the organization of it. 12 | */ 13 | app.get('/api/getBuckets', function(req, res) { 14 | var benchmarkConfigPath = global.appRoot + '/config/benchmarks/'; 15 | 16 | var suiteConfig = req.query.isSimple ? 'buckets_simple.xml' : 'buckets_metric.xml'; 17 | res.sendFile(benchmarkConfigPath + suiteConfig); 18 | }); 19 | 20 | /* 21 | * Get all benchmark definitions by reading all files from data folder (root/config/benchmarks). 22 | * This method appends all files to a single file (caches it) and then sends it to the caller. 23 | */ 24 | 25 | app.get('/api/getBenchmarks', function(req, res) { 26 | 27 | var benchmarkDataFolderPath = global.appRoot + "/config/benchmarks/data_simple/"; 28 | var compiledBenchmarksPath = global.appRoot + "/config/cache/benchmarks_compiled.xml"; 29 | 30 | var numFilesProcessed = 0; 31 | 32 | var master = new DOMParser().parseFromString(' '); //"Master" data File 33 | 34 | fs.readdir(benchmarkDataFolderPath, (err, files) => { //Read benchmark data folder 35 | files.forEach(file => { //For each file in the benchmark folder append to Master file 36 | var contents = fs.readFileSync(benchmarkDataFolderPath + file).toString(); 37 | var doc = new DOMParser().parseFromString(contents); 38 | var benchmarks = doc.getElementsByTagName('benchmark'); 39 | var numBenchmarks = benchmarks.length; 40 | 41 | for (var i = 0; i < numBenchmarks; i++) 42 | master.getElementsByTagName('benchmarks')[0].appendChild(benchmarks[i]); 43 | 44 | if(files.length === ++numFilesProcessed){ // Check if all files in the dir have been processed 45 | fs.writeFile(compiledBenchmarksPath, master, function(err) { 46 | res.sendFile(compiledBenchmarksPath); 47 | }); 48 | } 49 | }); 50 | }) 51 | }); 52 | } -------------------------------------------------------------------------------- /PerfNext/app/apis/builds.js: -------------------------------------------------------------------------------- 1 | /* 2 | * These APIs are used to provide build info. 3 | */ 4 | 5 | var request = require('request'); 6 | 7 | module.exports = function(app) { 8 | 9 | /* 10 | * Retrieve a list of Espresso Builds 11 | */ 12 | app.get('/api/espressoBuilds', function(req, res) { 13 | 14 | console.log('builds.js: Entering /api/espressoBuilds'); 15 | 16 | var product = req.query.product; 17 | 18 | var getOptions = { 19 | url: global.APP_DATA.builds_server_url + product, 20 | auth: { 21 | 'user': global.perffarmUsername, 22 | 'pass': global.perffarmEspressoPwd, 23 | } 24 | }; 25 | 26 | request.get(getOptions, function(error, response, body){ 27 | console.log('build.js: Making GET request for getting Espresso Builds'); 28 | //console.log('build.js: request error: '+error); //null 29 | //console.log('build.js: request response: '+response); //[object Object] 30 | //console.log('build.js: request body: '+body); //String with the required info regarding the builds 31 | res.send(body); 32 | }); 33 | }); 34 | 35 | /* 36 | * Retrieve a list of AdoptOpenJDK Builds 37 | */ 38 | app.get('/api/aojBuilds', function(req, res) { 39 | 40 | console.log('builds.js: Entering /api/aojBuilds'); 41 | 42 | var buildPath = req.query.buildPath; 43 | console.log('builds.js: buildPath: '+buildPath); 44 | 45 | 46 | var getOptions = { 47 | url: "https://api.adoptopenjdk.net"+buildPath, 48 | }; 49 | 50 | request.get(getOptions, function(error, response, body){ 51 | console.log('build.js: Making GET request for getting AdoptOpenJDK Builds'); 52 | //console.log('build.js: request error: '+error); //null 53 | //console.log('build.js: request response: '+response); //[object Object] 54 | //console.log('build.js: request body: '+body); //String with the required info regarding the builds 55 | res.send(body); 56 | }); 57 | 58 | }); 59 | 60 | } 61 | -------------------------------------------------------------------------------- /PerfNext/app/apis/common.js: -------------------------------------------------------------------------------- 1 | /* 2 | * These APIs are used to provide common app info. 3 | */ 4 | 5 | module.exports = function(app) { 6 | 7 | /* 8 | * Retrieve the common app configs 9 | */ 10 | app.get('/api/getAppData', function(req, res) { 11 | //res.sendFile(global.appRoot + '/config/APP_DATA.json'); 12 | res.send(global.APP_DATA); 13 | }); 14 | 15 | } -------------------------------------------------------------------------------- /PerfNext/app/apis/deprecated.js: -------------------------------------------------------------------------------- 1 | var request = require('request'); 2 | 3 | module.exports = function(app) { 4 | app.get('/api/submitJob', function(req, res) { 5 | 6 | var buildID = req.query.buildID; 7 | var spec = req.query.spec; 8 | var host = req.query.host; 9 | var benchmark = req.query.benchmark; 10 | var JDK = spec + '-' + buildID; 11 | 12 | var buildURL; 13 | var packageURL; 14 | 15 | //Move URLs To Config File 16 | if (host === 'Espresso') 17 | buildURL = global.APP_DATA.builds_server_url + spec + '/' + buildID + '/' + spec + '-' + buildID + '-sdk.jar'; 18 | 19 | packageURL = global.APP_DATA.packages_base_url + benchmark + '_Package.zip'; 20 | 21 | var jenkinsAPI = global.APP_DATA.jenkins_base + "/buildWithParameters?token=xYz@123&packageURL=" + encodeURIComponent(packageURL) + "&buildURL=" + encodeURIComponent(buildURL) + "&buildName=" + encodeURIComponent(JDK); 22 | request(jenkinsAPI, function (error, response, body) { 23 | if (error || response.statusCode != 200) { 24 | console.log(error); 25 | } 26 | }); 27 | 28 | res.sendStatus(200); 29 | }); 30 | } -------------------------------------------------------------------------------- /PerfNext/app/apis/jenkins.js: -------------------------------------------------------------------------------- 1 | var request = require('request'); 2 | 3 | var defaultMachine = '10.0.6.109'; 4 | 5 | 6 | /* 7 | * These APIs are used to provide Jenkins specific services. Then jenkinsBase and default machine 8 | * will need to be made dynamic. 9 | */ 10 | 11 | module.exports = function(app) { 12 | 13 | /* 14 | * Retrieve Console Output from Jenkins for a given jenkins jobID (job id from default machine) 15 | * Param: jobID (url param ../api/getConsoleOutput?jobID=x) 16 | */ 17 | app.get('/api/getConsoleOutput', function(req, res) { 18 | var jobID = encodeURIComponent(req.query.jobID); 19 | var jenkinsAPI = global.APP_DATA.jenkins_base + `/label=${defaultMachine}/${jobID}/consoleText`; 20 | 21 | request(jenkinsAPI, function (error, response, body) { 22 | res.send(body); 23 | }); 24 | }); 25 | 26 | /* 27 | * Retrieve a list of all jenkins jobIDs for the default machine 28 | */ 29 | app.get('/api/getJobIDs', function(req, res) { 30 | var jobID = encodeURIComponent(req.query.jobID); 31 | var jenkinsAPI = global.APP_DATA.jenkins_base + `/label=${defaultMachine}/api/json`; 32 | 33 | request(jenkinsAPI, function (error, response, body) { 34 | var builds = JSON.parse(body).builds; 35 | 36 | var buildIDs = []; 37 | 38 | for (var i = 0; i < builds.length; i++) 39 | buildIDs[i] = builds[i].number; 40 | 41 | res.json(buildIDs); 42 | }); 43 | }); 44 | } -------------------------------------------------------------------------------- /PerfNext/app/apis/machines.js: -------------------------------------------------------------------------------- 1 | /* 2 | * These APIs are used to provide Perf machine info. 3 | */ 4 | var request = require('request'); 5 | 6 | module.exports = function(app) { 7 | /* 8 | * Retrieve all the HW related info about all machines 9 | */ 10 | app.get('/api/machinesInfo', function(req, res) { 11 | var getOptions = { 12 | url: global.APP_DATA.machine_list_url, 13 | auth: { 14 | 'user': global.jenkinsUsername, 15 | 'pass': global.jenkinsPwd, 16 | } 17 | }; 18 | 19 | request.get(getOptions, function(error, response, body){ 20 | console.log('machine.js: Making GET request for getting machine database file'); 21 | res.type('application/xml'); 22 | res.send(body); 23 | }); 24 | }); 25 | 26 | } -------------------------------------------------------------------------------- /PerfNext/config/benchmarks/buckets_simple.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /PerfNext/config/benchmarks/data_simple/Crypto.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | '-Xms512m -Xmx512m' 9 | 10 | 11 | 12 | 1 13 | 14 | -------------------------------------------------------------------------------- /PerfNext/config/benchmarks/data_simple/SPEC.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The full (compliant) 2.5 hour jbb2015GMR run which searches for the HBIR and then measures the full rt-curve, at 1% increments. 5 | 6 | 7 | 8 | 9 | 10 | 11 | -Xaggressive -Dreflect.cache=boot -Dcom.ibm.enableClassCaching=true -Dcom.ibm.cacheLatestUserDefinedClassLoader=true -Dcom.ibm.crypto.provider.doAESInHardware=true -XtlhPrefetch -Xdump:java+system:events=user 12 | 13 | 2 14 | 1 15 | 16 | 17 | 1 18 | 19 | -------------------------------------------------------------------------------- /PerfNext/config/benchmarks/data_simple/Spark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 'websearch.pagerank micro.terasort micro.wordcount micro.sort micro.sleep' 8 | vandoorne 9 | large 10 | 25g 11 | -Xms25G 12 | -Xms4G 13 | 14 | 15 | 16 | 17 | 1 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /PerfNext/config/cache/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore -------------------------------------------------------------------------------- /PerfNext/logo.txt: -------------------------------------------------------------------------------- 1 | ################################################################# 2 | # ____ __ ______ _ # 3 | # / __ )___ ____ _____/ /_ / ____/___ ____ _(_)___ ___ # 4 | # / __ / _ \/ __ \/ ___/ __ \/ __/ / __ \/ __ `/ / __ \/ _ \ # 5 | # / /_/ / __/ / / / /__/ / / / /___/ / / / /_/ / / / / / __/ # 6 | # /_____/\___/_/ /_/\___/_/ /_/_____/_/ /_/\__, /_/_/ /_/\___/ # 7 | # /____/ # 8 | ################################################################# 9 | -------------------------------------------------------------------------------- /PerfNext/manifest.yml: -------------------------------------------------------------------------------- 1 | --- 2 | applications: 3 | - name: Perflauncher 4 | memory: 512M 5 | host: Perflauncher 6 | domain: stage1.mybluemix.net 7 | -------------------------------------------------------------------------------- /PerfNext/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PerfNext", 3 | "version": "0.0.1", 4 | "description": "PerftNext", 5 | "scripts": { 6 | "start": "node app.js" 7 | }, 8 | "dependencies": { 9 | "body-parser": "^1.20.3", 10 | "express": "^4.21.2", 11 | "node-datetime": "^1.0.1", 12 | "request": "^2.88.0", 13 | "xml2js": "^0.5.0", 14 | "xmldom": "^0.5.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /PerfNext/public/README.md: -------------------------------------------------------------------------------- 1 | # testci 2 | -------------------------------------------------------------------------------- /PerfNext/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PerfNext 6 | 9 | 10 | 11 | Go to /pages/schedule.html 12 | 13 | 14 | -------------------------------------------------------------------------------- /PerfNext/public/lib/css/perf-launcher.css: -------------------------------------------------------------------------------- 1 | .tab-content{ 2 | padding-top:15px 3 | } 4 | 5 | .drop-down-space{ 6 | margin-bottom: 5px; 7 | } 8 | 9 | .table-cap-height { 10 | display: block; 11 | height: 325px; 12 | overflow-y: scroll; 13 | padding-right: 25px; 14 | } 15 | 16 | .popover{ 17 | max-width: 100%; /* Max Width of the popover (depending on the container!) */ 18 | } 19 | 20 | .panel-heading .accordion-toggle:after { 21 | /* symbol for "opening" panels */ 22 | font-family: 'Glyphicons Halflings'; /* essential for enabling glyphicon */ 23 | content: "\e114"; /* adjust as needed, taken from bootstrap.css */ 24 | float: right; /* adjust as needed */ 25 | color: grey; /* adjust as needed */ 26 | } 27 | .panel-heading .accordion-toggle.collapsed:after { 28 | /* symbol for "collapsed" panels */ 29 | content: "\e080"; /* adjust as needed, taken from bootstrap.css */ 30 | } 31 | 32 | .dropdown-submenu { 33 | position: relative; 34 | } 35 | 36 | .dropdown-submenu>.dropdown-menu { 37 | top: 0; 38 | left: 100%; 39 | margin-top: -6px; 40 | margin-left: -1px; 41 | -webkit-border-radius: 0 6px 6px 6px; 42 | -moz-border-radius: 0 6px 6px; 43 | border-radius: 0 6px 6px 6px; 44 | } 45 | 46 | .dropdown-submenu:hover>.dropdown-menu { 47 | display: block; 48 | } 49 | 50 | .dropdown-submenu>a:after { 51 | display: block; 52 | content: " "; 53 | float: right; 54 | width: 0; 55 | height: 0; 56 | border-color: transparent; 57 | border-style: solid; 58 | border-width: 5px 0 5px 5px; 59 | border-left-color: #ccc; 60 | margin-top: 5px; 61 | margin-right: -10px; 62 | } 63 | 64 | .dropdown-submenu:hover>a:after { 65 | border-left-color: #fff; 66 | } 67 | 68 | .dropdown-submenu.pull-left { 69 | float: none; 70 | } 71 | 72 | .dropdown-submenu.pull-left>.dropdown-menu { 73 | left: -100%; 74 | margin-left: 10px; 75 | -webkit-border-radius: 6px 0 6px 6px; 76 | -moz-border-radius: 6px 0 6px 6px; 77 | border-radius: 6px 0 6px 6px; 78 | } 79 | 80 | .my-small-btn { 81 | width:75px; 82 | } -------------------------------------------------------------------------------- /PerfNext/public/lib/css/terminal.css: -------------------------------------------------------------------------------- 1 | .shell-wrap { 2 | width: 800px; 3 | box-shadow: 0 0 30px rgba(0,0,0,0.4); 4 | 5 | -webkit-border-radius: 3px; 6 | -moz-border-radius: 3px; 7 | border-radius: 3px; 8 | } 9 | 10 | .shell-top-bar { 11 | text-align: center; 12 | color: #525252; 13 | padding: 5px 0; 14 | margin: 0; 15 | text-shadow: 1px 1px 0 rgba(255,255,255,0.5); 16 | font-size: 0.85em; 17 | border: 1px solid #CCCCCC; 18 | border-bottom: none; 19 | 20 | -webkit-border-top-left-radius: 3px; 21 | -webkit-border-top-right-radius: 3px; 22 | -moz-border-radius-topleft: 3px; 23 | -moz-border-radius-topright: 3px; 24 | border-top-left-radius: 3px; 25 | border-top-right-radius: 3px; 26 | 27 | background: #f7f7f7; /* Old browsers */ 28 | background: -moz-linear-gradient(top, #f7f7f7 0%, #B8B8B8 100%); /* FF3.6+ */ 29 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f7f7f7), color-stop(100%,#B8B8B8)); /* Chrome,Safari4+ */ 30 | background: -webkit-linear-gradient(top, #f7f7f7 0%,#B8B8B8 100%); /* Chrome10+,Safari5.1+ */ 31 | background: -o-linear-gradient(top, #f7f7f7 0%,#B8B8B8 100%); /* Opera 11.10+ */ 32 | background: -ms-linear-gradient(top, #f7f7f7 0%,#B8B8B8 100%); /* IE10+ */ 33 | background: linear-gradient(to bottom, #f7f7f7 0%,#B8B8B8 100%); /* W3C */ 34 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', endColorstr='#B8B8B8',GradientType=0 ); /* IE6-9 */ 35 | } 36 | 37 | .shell-body { 38 | margin: 0; 39 | padding: 5px; 40 | list-style: none; 41 | background: #141414; 42 | color: #c0c0c0; 43 | font: 1em 'Andale Mono', Consolas, 'Courier New'; 44 | line-height: 1.6em; 45 | 46 | -webkit-border-bottom-right-radius: 3px; 47 | -webkit-border-bottom-left-radius: 3px; 48 | -moz-border-radius-bottomright: 3px; 49 | -moz-border-radius-bottomleft: 3px; 50 | border-bottom-right-radius: 3px; 51 | border-bottom-left-radius: 3px; 52 | } 53 | 54 | .shell-body li:before { 55 | content: '>'; 56 | position: absolute; 57 | left: 0; 58 | top: 0; 59 | } 60 | 61 | .shell-body li { 62 | word-wrap: break-word; 63 | position: relative; 64 | padding: 0 0 0 15px; 65 | } -------------------------------------------------------------------------------- /PerfNext/public/lib/js/jobOutput.js: -------------------------------------------------------------------------------- 1 | 2 | $(function() { 3 | $.get("/api/getJobIDs", function(data, status) { 4 | 5 | $.each(data, function (i) { 6 | $('#job').append($('