diff --git a/.gitignore b/.gitignore
index 485dee64..bc06b51d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
.idea
+backend/ocpperf.toml
\ No newline at end of file
diff --git a/backend/app/api/api.py b/backend/app/api/api.py
index 79e90bef..503c1c0f 100644
--- a/backend/app/api/api.py
+++ b/backend/app/api/api.py
@@ -3,8 +3,10 @@
from app.api.endpoints import results
from app.api.endpoints import airflow
from app.api.endpoints import jobs
+from app.api.endpoints import jenkins
api_router = APIRouter()
api_router.include_router(results.router, tags=['perfscale'])
api_router.include_router(airflow.router, tags=['perfscale'])
api_router.include_router(jobs.router, tags=['perfscale'])
+api_router.include_router(jenkins.router, tags=['perfscale'])
diff --git a/backend/app/api/endpoints/common.py b/backend/app/api/endpoints/common.py
new file mode 100644
index 00000000..05ab8855
--- /dev/null
+++ b/backend/app/api/endpoints/common.py
@@ -0,0 +1,77 @@
+from datetime import datetime,timedelta
+import trio
+import semver
+import pandas as pd
+from app.services.search import ElasticService
+
+from app.async_util import trio_run_with_asyncio
+
+
+async def getData(type):
+ query = {
+ "query": {
+ "bool": {
+ "must": [
+ {
+ "query_string": {
+ "query": "ciSystem == " + type
+ }
+ },
+ {
+ "range": {
+ "timestamp": {
+ "gte": "now-10d"
+ }
+ }
+ }
+ ]
+ }
+ }
+}
+
+ es = ElasticService()
+ response = await es.post(query)
+ await es.close()
+ tasks = [item['_source'] for item in response["hits"]["hits"]]
+ jobs = pd.json_normalize(tasks)
+ cleanJobs = jobs[jobs['platform'] != ""]
+
+ drop = ['endDate','clusterName','upstreamJobBuild','executionDate',
+ 'startDate','buildTag','upstreamJob','releaseStream','timestamp',
+ 'jobDuration','networkType','workerNodesType','infraNodesType','masterNodesType',
+ 'workerNodesCount','infraNodesCount','masterNodesCount']
+ cleanJobs = cleanJobs.drop(columns=drop)
+ cleanJobs['shortVersion'] = cleanJobs['ocpVersion'].str.slice(0,4)
+
+ df = {'response': group_by_platform(cleanJobs)}
+
+ return df
+
+def group_by_platform(data_frame: pd.DataFrame):
+ return [
+ get_table(group[0], group[1].drop(columns=['platform']))
+ for group in data_frame.groupby(by=['platform'])
+ ]
+
+
+def get_table(title: str, data_frame: pd.DataFrame):
+ return {
+ 'title': title,
+ 'data' : get_framelist(data_frame)
+ }
+
+def get_framelist(data_frame: pd.DataFrame):
+ return [
+ get_frame(group[0], (group[1].drop(
+ columns=['nodeName', 'ocpVersion'])))
+ for group in data_frame.groupby(by=['shortVersion'])
+ ]
+
+
+def get_frame(title: str, data_frame: pd.DataFrame):
+ return {
+ 'version' : title.title(),
+ 'cloud_data': data_frame.values.tolist(),
+ 'columns' : [name.replace('_', ' ').title()
+ for name in data_frame.columns.tolist()]
+ }
\ No newline at end of file
diff --git a/backend/app/api/endpoints/jenkins.py b/backend/app/api/endpoints/jenkins.py
new file mode 100644
index 00000000..b96f56db
--- /dev/null
+++ b/backend/app/api/endpoints/jenkins.py
@@ -0,0 +1,11 @@
+from .common import getData
+from fastapi import APIRouter
+
+from app.async_util import trio_run_with_asyncio
+
+router = APIRouter()
+
+@router.post('/api/jenkins')
+@router.get('/api/jenkins')
+async def jobs():
+ return await getData("JENKINS")
diff --git a/backend/app/api/endpoints/jobs.py b/backend/app/api/endpoints/jobs.py
index d74c6ea0..848f55f8 100644
--- a/backend/app/api/endpoints/jobs.py
+++ b/backend/app/api/endpoints/jobs.py
@@ -1,10 +1,5 @@
-from datetime import datetime,timedelta
-import trio
-import semver
-import pprint
-import pandas as pd
+from .common import getData
from fastapi import APIRouter
-from app.services.search import ElasticService
from app.async_util import trio_run_with_asyncio
@@ -13,74 +8,4 @@
@router.post('/api/jobs')
@router.get('/api/jobs')
async def jobs():
- query = {
- "query": {
- "bool": {
- "must": [
- {
- "query_string": {
- "query": "ciSystem == PROW || ciSystem == JENKINS"
- }
- },
- {
- "range": {
- "timestamp": {
- "gte": "now-10d"
- }
- }
- }
- ]
- }
- }
-}
-
- es = ElasticService()
- response = await es.post(query)
- await es.close()
- tasks = [item['_source'] for item in response["hits"]["hits"]]
- jobs = pd.json_normalize(tasks)
-
-
- drop = ['endDate','clusterName','upstreamJobBuild','executionDate',
- 'startDate','buildTag','upstreamJob','releaseStream','timestamp',
- 'jobDuration','networkType','workerNodesType','infraNodesType','masterNodesType',
- 'workerNodesCount','infraNodesCount','masterNodesCount']
- jobs = jobs.drop(columns=drop)
- jobs['shortVersion'] = jobs['ocpVersion'].str.slice(0,4)
-
- pprint.pprint(jobs)
-
- cloud_data = []
-
- df = {'response': group_by_platform(jobs) }
-
- return df
-
-def group_by_platform(data_frame: pd.DataFrame):
- return [
- get_table(group[0], group[1].drop(columns=['platform']))
- for group in data_frame.groupby(by=['platform'])
- ]
-
-
-def get_table(title: str, data_frame: pd.DataFrame):
- return {
- 'title': title,
- 'data' : get_framelist(data_frame)
- }
-
-def get_framelist(data_frame: pd.DataFrame):
- return [
- get_frame(group[0], (group[1].drop(
- columns=['nodeName', 'ocpVersion'])))
- for group in data_frame.groupby(by=['shortVersion'])
- ]
-
-
-def get_frame(title: str, data_frame: pd.DataFrame):
- return {
- 'version' : title.title(),
- 'cloud_data': data_frame.values.tolist(),
- 'columns' : [name.replace('_', ' ').title()
- for name in data_frame.columns.tolist()]
- }
\ No newline at end of file
+ return await getData("PROW")
diff --git a/frontend/src/App.js b/frontend/src/App.js
index f42659fd..ad792708 100644
--- a/frontend/src/App.js
+++ b/frontend/src/App.js
@@ -7,6 +7,7 @@ import {
} from "react-router-dom";
import PlatformView from './components/Platform/PlatformView';
import JobView from './components/Platform/JobView';
+import JenkinsView from './components/Platform/JenkinsView';
import { Nav, NavItem, NavList, PageHeader } from '@patternfly/react-core';
import {
Page,
@@ -32,6 +33,9 @@ export default function App() {