{"version":3,"sources":["actions/user.js","store.js","images/logo.svg","images/line-angle.png","images/line-t.png","actions/status.js","api.js","actions/logfile.js","actions/semaphores.js","actions/tenants.js","actions/actionTypes.js","actions/freezejob.js","actions/jobgraph.js","registerServiceWorker.js","containers/auth/Auth.jsx","containers/ErrorBoundary.jsx","containers/Fetching.jsx","containers/timezone/SelectTz.jsx","containers/config/Config.jsx","actions/configErrors.js","actions/component.js","Misc.jsx","containers/component/ComponentTable.jsx","pages/Components.jsx","containers/freezejob/FreezeJobToolbar.jsx","pages/FreezeJob.jsx","actions/adminActions.js","containers/status/ChangePanel.jsx","containers/status/Change.jsx","containers/status/ChangeQueue.jsx","containers/status/Pipeline.jsx","pages/Status.jsx","pages/ChangeStatus.jsx","containers/project/ProjectVariant.jsx","containers/project/Project.jsx","containers/jobgraph/JobGraphToolbar.jsx","containers/jobgraph/JobGraphDisplay.jsx","containers/jobgraph/JobGraph.jsx","pages/Project.jsx","pages/Projects.jsx","containers/SourceContext.jsx","containers/job/Nodeset.jsx","containers/job/Role.jsx","containers/job/JobProject.jsx","containers/job/JobDescriptionCard.jsx","containers/job/JobVariant.jsx","containers/job/Job.jsx","pages/Job.jsx","containers/jobs/Jobs.jsx","pages/Jobs.jsx","pages/Labels.jsx","pages/Nodes.jsx","containers/semaphore/Semaphore.jsx","pages/Semaphore.jsx","containers/semaphore/SemaphoreTable.jsx","pages/Semaphores.jsx","containers/autohold/AutoholdTable.jsx","containers/autohold/autoholdModal.jsx","pages/Autoholds.jsx","containers/Errors.jsx","containers/autohold/HeldBuildList.jsx","pages/Autohold.jsx","containers/build/Artifact.jsx","containers/build/Misc.jsx","containers/build/Build.jsx","containers/build/BuildOutput.jsx","containers/build/Console.jsx","containers/build/Manifest.jsx","containers/logfile/LogFile.jsx","pages/Build.jsx","containers/filters/Select.jsx","containers/filters/TernarySelect.jsx","containers/filters/Checkbox.jsx","containers/FilterToolbar.jsx","containers/build/BuildTable.jsx","pages/Builds.jsx","containers/build/BuildList.jsx","containers/charts/ChartModal.jsx","containers/charts/Misc.jsx","containers/charts/GanttChart.jsx","containers/build/Buildset.jsx","pages/Buildset.jsx","containers/build/BuildsetTable.jsx","pages/Buildsets.jsx","pages/ConfigErrors.jsx","pages/Tenants.jsx","pages/Stream.jsx","pages/OpenApi.jsx","routes.js","pages/AuthCallback.jsx","pages/AuthRequired.jsx","App.jsx","ZuulAuthProvider.jsx","pages/SilentCallback.jsx","index.js","reducers/auth.js","reducers/autoholds.js","reducers/configErrors.js","reducers/change.js","reducers/initialState.js","reducers/component.js","reducers/freezejob.js","reducers/notifications.js","reducers/build.js","reducers/info.js","reducers/job.js","reducers/jobgraph.js","reducers/jobs.js","reducers/labels.js","reducers/logfile.js","reducers/nodes.js","reducers/openapi.js","reducers/project.js","reducers/pipelines.js","reducers/projects.js","reducers/preferences.js","reducers/semaphores.js","reducers/status.js","reducers/tenant.js","reducers/tenants.js","reducers/timezone.js","reducers/user.js","reducers/index.js","store.prod.js","actions/tenant.js","actions/info.js","actions/change.js","actions/job.js","actions/jobs.js","actions/labels.js","actions/nodes.js","actions/openapi.js","actions/project.js","actions/pipelines.js","actions/projects.js","actions/build.js","actions/preferences.js","actions/timezone.js","actions/notifications.js","actions/autoholds.js","actions/auth.js"],"names":["USER_LOGGED_IN","USER_LOGGED_OUT","getToken","user","e","fetchUserACLRequest","tenant","userLoggedIn","redirect","dispatch","token","userLoggedOut","fetchUserACLSuccess","json","fetchUserACLFail","error","fetchUserACL","apiPrefix","response","module","STATUS_FETCH_REQUEST","STATUS_FETCH_SUCCESS","STATUS_FETCH_FAIL","requestStatus","receiveStatus","failedStatus","fetchStatus","shouldFetchStatus","state","status","fetchStatusIfNeeded","getState","authToken","setAuthToken","getHomepageUrl","url","baseUrl","path","getZuulUrl","ZUUL_API","apiUrl","getStreamUrl","makeRequest","method","data","instance","config","err","err2","fetchInfo","fetchComponents","fetchTenantInfo","fetchOpenApi","fetchTenants","fetchConfigErrors","fetchChangeStatus","changeId","fetchFreezeJob","pipelineName","projectName","branchName","jobName","fetchBuild","buildId","fetchBuilds","queryString","fetchBuildset","buildsetId","fetchBuildsets","fetchPipelines","fetchProject","fetchProjects","fetchJob","fetchJobGraph","fetchJobs","fetchLabels","fetchNodes","fetchSemaphores","fetchAutoholds","fetchAutohold","requestId","fetchUserAuthorizations","dequeue","pipeline","change","dequeue_ref","ref","enqueue","enqueue_ref","oldrev","newrev","autohold","job","reason","count","node_hold_expiration","autohold_delete","promote","changes","LOGFILE_FETCH_REQUEST","LOGFILE_FETCH_SUCCESS","LOGFILE_FETCH_FAIL","requestLogfile","SYSLOGDATE","DATEFMT","STATUSFMT","severityMap","OSLO_LOGMATCH","SYSTEMD_LOGMATCH","receiveLogfile","file","out","line","idx","m","sev","failedLogfile","fetchLogfile","build","item","SEMAPHORES_FETCH_REQUEST","SEMAPHORES_FETCH_SUCCESS","SEMAPHORES_FETCH_FAIL","requestSemaphores","receiveSemaphores","failedSemaphores","shouldFetchSemaphores","semaphores","fetchSemaphoresIfNeeded","force","TENANTS_FETCH_REQUEST","TENANTS_FETCH_SUCCESS","TENANTS_FETCH_FAIL","requestTenants","receiveTenants","failedTenants","shouldFetchTenants","tenants","fetchTenantsIfNeeded","COMPONENTS_FETCH_REQUEST","COMPONENTS_FETCH_SUCCESS","COMPONENTS_FETCH_FAIL","FREEZE_JOB_FETCH_REQUEST","FREEZE_JOB_FETCH_SUCCESS","FREEZE_JOB_FETCH_FAIL","requestFreezeJob","makeFreezeJobKey","project","branch","receiveFreezeJob","freezeJobKey","freezeJob","failedFreezeJob","shouldFetchFreezeJob","tenantFreezeJobs","fetchFreezeJobIfNeeded","JOB_GRAPH_FETCH_REQUEST","JOB_GRAPH_FETCH_SUCCESS","JOB_GRAPH_FETCH_FAIL","requestJobGraph","makeJobGraphKey","receiveJobGraph","jobGraphKey","jobGraph","failedJobGraph","shouldFetchJobGraph","tenantJobGraphs","fetchJobGraphIfNeeded","isLocalhost","register","unregister","swUrl","checkValidServiceWorker","registerValidSW","registration","installingWorker","props","isModalOpen","isSessionExpiredModalOpen","showZuulClientConfig","redirect_target","ZCconfig","api","Modal","Button","timezone","valid_until","moment","Accordion","AccordionItem","AccordionToggle","AccordionContent","ClipboardCopy","containerStyles","info","auth","Fetchable","isFetching","fetchCallback","content","Spinner","Fetching","EmptyState","Title","selectedTz","tz","timezoneAction","textColor","customStyles","provided","DropdownIndicator","theme","autoReload","Switch","fetchConfigErrorsAction","clearConfigErrorsAction","requestComponents","receiveComponents","components","failedComponents","removeHash","ExternalLink","target","buildExternalLink","buildish","buildExternalTableLink","IconProperty","icon","value","WrapElement","ConditionalWrapper","condition","wrapper","children","STATE_ICON_CONFIGS","DEFAULT_STATE_ICON_CONFIG","ComponentStateIcon","iconConfig","Icon","ComponentState","ComponentTable","rows","setRows","sortComponents","a","b","allRows","i","sectionIndex","kind","_components","sectionRows","component","createComponentRow","createSectionRow","columns","childrenCount","parent_id","handleCollapse","event","rowKey","isOpen","_rows","Table","ComponentsPage","EmptyStateIcon","PageSection","TextContent","Text","mapStateToProps","mapDispatchToProps","FreezeJobToolbar","fetchPipelinesIfNeeded","tenantPipelines","pipelines","p","isPipelineOpen","setIsPipelineOpen","currentPipeline","setCurrentPipeline","currentProject","setCurrentProject","currentBranch","setCurrentBranch","currentJob","setCurrentJob","handlePipelineSelect","handlePipelineToggle","handleProjectChange","newValue","handleBranchChange","handleJobChange","handleInputSend","renderFreezeJobToolbar","Toolbar","ToolbarContent","ToolbarToggleGroup","ToolbarGroup","ToolbarItem","Dropdown","DropdownToggle","DropdownItem","TextInput","FreezeJobPage","history","location","urlParams","onChange","searchParams","tenantJobs","renderFrozenJob","ADMIN_DEQUEUE_FAIL","ADMIN_ENQUEUE_FAIL","ADMIN_AUTOHOLD_FAIL","ADMIN_PROMOTE_FAIL","parseAPIerror","addDequeueError","addEnqueueError","addAutoholdError","addPromoteError","expanded","ms","hours","delta","text","result","changeTitle","changeText","githubId","interesting_jobs","j","jobPercent","className","times","remainingTime","elapsedTime","progressPercent","progressWidth","title","remaining","job_times","job_name","ordinal_rules","suffixes","name","to","resultBar","jobs","buttonText","interestingJobs","skippedJobCount","maxRemaining","now","jobElapsed","jobRemaining","jobStart","globalExpanded","expand","header","changeRef","showDequeueModal","showPromoteModal","showAdminActions","queue","dropdownCommands","KebabToggle","iconGlyph","iconTitle","image","row","adminMenuWidth","changeWidth","fullName","shortName","changesList","changeIdx","PIPELINE_ICONS","DEFAULT_PIPELINE_ICON","pipelineMaxTreeColumns","changeQueue","tree","maxTreeColumns","lastTreeLength","head","changeIndex","id","filter","found","filters","changeFilter","pipeline_type","pl_config","Tooltip","Badge","prevProps","remoteData","statusControl","Form","FormGroup","FormControl","Checkbox","ProjectVariant","variant","templateList","jobList","Project","variantIdx","setVariantIdx","renderVariantTitle","Tabs","tabIndex","Tab","JobGraphToolbar","pipelineSet","renderJobGraphToolbar","makeDot","ret","escaped_url","dep","soft","GraphViz","gv","match","d3","val","JobGraphDisplay","dot","setDot","tenantJobGraph","JobGraph","ProjectPage","fetchProjectIfNeeded","tenantProjects","updateData","projects","headerFormat","cellFormat","cellProjectFormat","cellBuildFormat","column","formatter","prop","context","showBranch","treeViewItem","nodeset","activeItems","nodes","node","List","ListItem","groups","group","group_children","child_node","options","TreeView","role","Card","CardHeader","CardTitle","CardExpandableContent","CardBody","key","label","nice_label","alt","values","items","DescriptionList","DescriptionListGroup","DescriptionListTerm","DescriptionListDescription","activeTabKey","TabTitleText","flatten","linkPrefix","jobMap","visited","createNode","extra","tag","getNode","filtered","parents","jobVariant","parent","jobFilter","jobNode","attached","parentNode","Jobs","labels","cellLabelsFormat","cellPreFormat","cellAgeFormat","Semaphore","semaphore","fetching","holder","SemaphorePage","semaphoreName","SemaphoreTable","createSemaphoreRow","Label","createFetchingRow","haveSemaphores","EmptyStateBody","SemaphoresPage","AutoholdTable","autoholds","handleAutoholdDelete","renderAutoholdDeleteButton","createAutoholdRow","node_expiration","delete_button","AutoholdModal","showAutoholdModal","setShowAutoholdModal","setChange","setChangeRef","setProject","setJob_name","setReason","setCount","nodeHoldExpiration","setNodeHoldExpiration","handleConfirm","ah_change","ah_ref","Flex","FlexItem","EmptyPage","linkTarget","linkText","EmptyStatePrimary","selectedBuildId","DataList","DataListItem","DataListItemRow","DataListItemCells","DataListCell","EXPIRED_HOLD_REQUEST_TTL","buildsContent","elapsed","timeToDeletion","deletionInfo","deletionInfoMsg","artifact","artifacts","index","RESULT_ICON_CONFIGS","DEFAULT_RESULT_ICON_CONFIG","BuildResult","link","colored","color","BuildResultBadge","BuildResultWithIcon","size","verticalAlign","Build","build_link","renderAutoholdButton","failures","Divider","hosts","host","Chip","task","output","failed","INTERESTING_KEYS","interesting_results","ignore_underscore","taskPath","displayPath","hostname","dataListCells","interestingKeys","labelColor","labelString","duration","DataListToggle","DataListContent","modalDescription","play","playbook","errorIds","togglePlays","newExpanded","idx2","raw_suffix","obj","n","log_url","sortNumeric","SCROLL_OFFSET","LogFile","logfileName","logfileContent","handleBreadcrumbItemClick","severity","setSeverity","highlightStart","setHighlightStart","highlightEnd","setHighlightEnd","scrollOnPageLoad","setScrollOnPageLoad","lines","elements","y","handleItemClick","isSelected","writeSeverityToUrl","updateSelection","lineClicked","distances","pos","renderLogfile","ToggleGroup","ToggleGroupItem","highlightLine","logfilePath","Breadcrumb","BreadcrumbItem","part","logfile","isFetchingManifest","isFetchingOutput","isFetchingLogfile","activeTab","hash","resultsTabContent","artifactsTabContent","logsTabContent","consoleTabContent","TabTitleIcon","scrollToTop","ownProps","buildFromState","FilterSelect","category","setIsOpen","selected","setSelected","setOptions","onToggle","onSelect","selection","onFilterChange","newSelected","newFilters","onClear","chipGroupComponent","chipped","ChipGroup","currentChip","onCreateOption","newOptions","Select","option","SelectOption","FilterTernarySelect","_selected","_selection","setNewFilter","FilterCheckbox","checked","FilterToolbar","isCategoryDropdownOpen","setIsCategoryDropdownOpen","currentCategory","setCurrentCategory","inputValue","setInputValue","handleCategoryToggle","handleCategorySelect","handleInputChange","prevFilters","handleDelete","type","filterCategories","s","filterDict","renderCategoryDropdown","renderFilterInput","InputGroup","renderFilterDropdown","ToolbarFilter","getChipsFromFilters","getFiltersFromUrl","_filters","param","pagination_options","writeFiltersToUrl","buildQueryString","excludeResults","resultFilter","BuildTable","builds","onClearFilters","cellWidth","createBuildRow","changeOrRefLink","actions","rowId","rowData","EmptyStateSecondaryActions","itemCount","paginationOptions","finalItemCount","x1","y1","_oldFilters","x2","y2","_newFilters","equalTest","finalFilters","newState","perPage","pageNumber","resultsPerPage","offset","currentPage","Pagination","firstIndex","lastIndex","visibleNonFinalBuilds","showSkipped","isChecked","retriedJobs","newVisible","hasRetries","isExpanded","RetryIcon","retryAltText","self","skippedJobs","retrySwitch","skippedSwitch","sortedBuilds","linkWrap","cell","ChartModal","chart","onClose","buildResultLegendData","buildsBarStyleMap","final","x","buildsBarStyle","datum","BuildsetGanttChart","sortedByStartTime","origin","longestJobName","legendData","legend","uniqueResults","chartLegend","Chart","ChartLegend","ChartAxis","t","format","ChartBar","ChartTooltip","Buildset","buildset","buildset_link","isGanttChartModalOpen","setIsGanttChartModalOpen","renderBuildTimes","firstStartBuild","prev","cur","lastEndBuild","totalDuration","overallDuration","buildLink","firstStartLink","lastEndLink","showEnqueueModal","setShowEnqueueModal","renderEnqueueButton","enqueueConfirm","renderEnqueueModal","changeInfo","BuildsetTable","buildsets","isDurationOpen","setIsDurationOpen","currentDuration","setCurrentDuration","handleDurationSelect","next","createBuildsetRow","configErrors","ctxPath","message","searchOptions","params","term","fitAddon","webLinksAddon","searchAddon","routes","Status","Projects","Labels","Nodes","Autoholds","Semaphores","Builds","Buildsets","FreezeJob","ChangeStatus","Stream","Autohold","ConfigErrors","Tenants","OpenApi","Components","AuthCallbackPage","AuthRequiredPage","AuthRequired","allRoutes","AuthCallback","routerProps","isKebabDropdownOpen","notifications","ToastNotificationList","notification","notificationBody","TimedToastNotification","showErrors","errors","cookie","NotificationDrawerListItem","NotificationDrawerListItemHeader","NotificationDrawerListItemBody","NotificationDrawer","NotificationDrawerBody","NotificationDrawerList","Nav","NavList","NavItem","configErrorsReady","tenantName","whiteLabel","tenantAction","isTenantDropdownOpen","PageHeaderToolsItem","tenantLink","_tenant","currentPath","suffix","DropdownSeparator","nav","kebabDropdownItems","pageHeaderTools","PageHeaderTools","PageHeaderToolsGroup","NotificationBadge","Config","Auth","logoUrl","pageHeader","PageHeader","Brand","Page","auth_params","channel","election","userManager","oidcConfig","msg","olduser","needToUpdate","store","auth_election","waitForever","stored_params","action","json_params","stateFreezeJobs","stateJobGraphs","filesForBuild","state_projects","stored_prefs","default_prefs","newstate","reducers","configureStore","initialState","TENANT_SET","setTenantAction","routePrefix","defaultRoute","INFO_FETCH_REQUEST","INFO_FETCH_SUCCESS","INFO_FETCH_FAIL","fetchInfoRequest","fetchInfoSuccess","fetchInfoFail","shouldFetchInfo","fetchInfoIfNeeded","CHANGE_FETCH_REQUEST","CHANGE_FETCH_SUCCESS","CHANGE_FETCH_FAIL","requestChange","receiveChange","failedChange","fetchChange","shouldFetchChange","fetchChangeIfNeeded","JOB_FETCH_REQUEST","JOB_FETCH_SUCCESS","JOB_FETCH_FAIL","requestJob","receiveJob","jobname","failedJob","shouldFetchJob","fetchJobIfNeeded","JOBS_FETCH_REQUEST","JOBS_FETCH_SUCCESS","JOBS_FETCH_FAIL","requestJobs","receiveJobs","failedJobs","shouldFetchJobs","fetchJobsIfNeeded","LABELS_FETCH_REQUEST","LABELS_FETCH_SUCCESS","LABELS_FETCH_FAIL","requestLabels","receiveLabels","failedLabels","shouldFetchLabels","fetchLabelsIfNeeded","NODES_FETCH_REQUEST","NODES_FETCH_SUCCESS","NODES_FETCH_FAIL","requestNodes","receiveNodes","failedNodes","shouldFetchNodes","fetchNodesIfNeeded","OPENAPI_FETCH_REQUEST","OPENAPI_FETCH_SUCCESS","OPENAPI_FETCH_FAIL","fetchOpenApiRequest","fetchOpenApiSuccess","yaml_data","paths","fetchOpenApiFail","shouldFetchOpenApi","openapi","fetchOpenApiIfNeeded","PROJECT_FETCH_REQUEST","PROJECT_FETCH_SUCCESS","PROJECT_FETCH_FAIL","requestProject","receiveProject","templateIdx","templatePipeline","failedProject","shouldFetchProject","PIPELINES_FETCH_REQUEST","PIPELINES_FETCH_SUCCESS","PIPELINES_FETCH_FAIL","requestPipelines","receivePipelines","failedPipelines","shouldFetchPipelines","PROJECTS_FETCH_REQUEST","PROJECTS_FETCH_SUCCESS","PROJECTS_FETCH_FAIL","requestProjects","receiveProjects","failedProjects","shouldFetchProjects","fetchProjectsIfNeeded","BUILD_FETCH_REQUEST","BUILD_FETCH_SUCCESS","BUILD_FETCH_FAIL","BUILDSET_FETCH_REQUEST","BUILDSET_FETCH_SUCCESS","BUILDSET_FETCH_FAIL","BUILD_OUTPUT_REQUEST","BUILD_OUTPUT_SUCCESS","BUILD_OUTPUT_FAIL","BUILD_OUTPUT_NOT_AVAILABLE","BUILD_MANIFEST_REQUEST","BUILD_MANIFEST_SUCCESS","BUILD_MANIFEST_FAIL","BUILD_MANIFEST_NOT_AVAILABLE","requestBuild","receiveBuild","failedBuild","requestBuildOutput","renderTree","textRenderer","defaultRenderer","didTaskFail","hasInterestingKeys","keys","k","v","findLoopLabel","shouldIncludeKey","included","makeTaskPath","taskPathMatches","test","receiveBuildOutput","taskFailed","taskResult","phase","stats","failedBuildOutput","requestBuildManifest","receiveBuildManifest","manifest","renderNode","root","object","failedBuildManifest","buildOutputNotAvailable","buildManifestNotAvailable","fetchBuildOutput","fetchBuildManifest","fetchBuildAllInfo","requestBuildset","receiveBuildset","failedBuildset","shouldFetchBuildset","fetchBuildsetIfNeeded","PREFERENCE_SET","setPreference","TIMEZONE_SET","setTimezoneAction","ADD_NOTIFICATION","CLEAR_NOTIFICATION","CLEAR_NOTIFICATIONS","notificationId","addNotification","addApiError","d","clearNotification","clearNotifications","AUTOHOLDS_FETCH_REQUEST","AUTOHOLDS_FETCH_SUCCESS","AUTOHOLDS_FETCH_FAIL","AUTOHOLD_FETCH_REQUEST","AUTOHOLD_FETCH_SUCCESS","AUTOHOLD_FETCH_FAIL","requestAutoholds","receiveAutoholds","failedAutoholds","shouldFetchAutoholds","fetchAutoholdsIfNeeded","requestAutohold","receiveAutohold","failedAutohold","AUTH_CONFIG_REQUEST","AUTH_CONFIG_SUCCESS","AUTH_CONFIG_FAIL","USER_ACL_REQUEST","USER_ACL_SUCCESS","USER_ACL_FAIL","AUTH_START","authConfigRequest","createAuthParamsFromJson","auth_info","realm","client_config","authConfigSuccess","authConfigFail","configureAuthFromTenant","configureAuthFromInfo"],"mappings":"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","file":"static/js/main.d96e0e47.chunk.js","sourcesContent":["// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n\nimport * as API from '../api'\nimport { USER_ACL_FAIL, USER_ACL_REQUEST, USER_ACL_SUCCESS } from './auth'\n\nexport const USER_LOGGED_IN = 'USER_LOGGED_IN'\nexport const USER_LOGGED_OUT = 'USER_LOGGED_OUT'\n\n// Access tokens are not necessary JWTs (Google OAUTH uses a custom format)\n// check the access token, if it isn't a JWT, use the ID token\n\nexport function getToken(user) {\n try {\n JSON.parse(atob(user.access_token.split('.')[1]))\n return user.access_token\n } catch (e) {\n return user.id_token\n }\n}\n\nexport const fetchUserACLRequest = (tenant) => ({\n type: USER_ACL_REQUEST,\n tenant: tenant,\n})\n\nexport const userLoggedIn = (user, redirect) => (dispatch) => {\n const token = getToken(user)\n API.setAuthToken(token)\n dispatch({\n type: USER_LOGGED_IN,\n user: user,\n token: token,\n redirect: redirect,\n })\n}\n\nexport const userLoggedOut = () => (dispatch) => {\n dispatch({\n type: USER_LOGGED_OUT,\n })\n}\n\nconst fetchUserACLSuccess = (json) => ({\n type: USER_ACL_SUCCESS,\n isAdmin: json.zuul.admin,\n scope: json.zuul.scope,\n})\n\nconst fetchUserACLFail = error => ({\n type: USER_ACL_FAIL,\n error\n})\n\nexport const fetchUserACL = (tenant) => (dispatch) => {\n dispatch(fetchUserACLRequest(tenant))\n let apiPrefix = tenant? 'tenant/' + tenant + '/' : ''\n return API.fetchUserAuthorizations(apiPrefix)\n .then(response => dispatch(fetchUserACLSuccess(response.data)))\n .catch(error => {\n dispatch(fetchUserACLFail(error))\n })\n}\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Use CommonJS require so we can dynamically import during build-time.\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./store.prod')\n} else {\n module.exports = require('./store.dev')\n}\n","module.exports = __webpack_public_path__ + \"static/media/logo.af35e3f8.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90JGAANHFtmmlIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAYUlEQVQ4y2P4TyFgGDVgMBgABP9hOCcn5//Lly/JNwCEdXR0/r969Yp0L7x///6/qakp2BA1NbX/T58+JT0MyDEEIxBJNQRrLIDCQFdXF2zItGnTyItGkCGwgCU7HdDFAAD6PbBKoL8ZggAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90JGAAUGbAMx8UAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAJ0lEQVQ4y2P8DwQMFADGUQMGgwFAPMAG4PMCIyMjmMbny1EDBoMBAIH5TtcIV8WrAAAAAElFTkSuQmCC\"","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const STATUS_FETCH_REQUEST = 'STATUS_FETCH_REQUEST'\nexport const STATUS_FETCH_SUCCESS = 'STATUS_FETCH_SUCCESS'\nexport const STATUS_FETCH_FAIL = 'STATUS_FETCH_FAIL'\n\nexport const requestStatus = () => ({\n type: STATUS_FETCH_REQUEST\n})\n\nexport const receiveStatus = json => ({\n type: STATUS_FETCH_SUCCESS,\n status: json,\n receivedAt: Date.now()\n})\n\nconst failedStatus = error => ({\n type: STATUS_FETCH_FAIL,\n error\n})\n\n// Create fake delay\n//function sleeper(ms) {\n// return function(x) {\n// return new Promise(resolve => setTimeout(() => resolve(x), ms));\n// };\n//}\n\nconst fetchStatus = (tenant) => dispatch => {\n dispatch(requestStatus())\n return API.fetchStatus(tenant.apiPrefix)\n .then(response => dispatch(receiveStatus(response.data)))\n .catch(error => dispatch(failedStatus(error)))\n}\n\nconst shouldFetchStatus = state => {\n const status = state.status\n if (!status) {\n return true\n }\n if (status.isFetching) {\n return false\n }\n return true\n}\n\nexport const fetchStatusIfNeeded = (tenant) => (dispatch, getState) => {\n if (shouldFetchStatus(getState())) {\n return dispatch(fetchStatus(tenant))\n }\n return Promise.resolve()\n}\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport Axios from 'axios'\n\nlet authToken = undefined\n\nexport function setAuthToken(token) {\n authToken = token\n}\n\nfunction getHomepageUrl(url) {\n //\n // Discover serving location from href.\n //\n // This is only needed for sub-directory serving.\n // Serving the application from '/' may simply default to '/'\n //\n // Note that this is not enough for sub-directory serving,\n // The static files location also needs to be adapted with the 'homepage'\n // settings of the package.json file.\n //\n // This homepage url is used for the Router and Link resolution logic\n //\n let baseUrl\n if (url) {\n baseUrl = url\n } else {\n baseUrl = window.location.href\n }\n // Get dirname of the current url\n baseUrl = baseUrl.replace(/\\\\/g, '/').replace(/\\/[^/]*$/, '/')\n\n // Remove any query strings\n if (baseUrl.includes('?')) {\n baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf('?'))\n }\n // Remove any hash anchor\n if (baseUrl.includes('/#')) {\n baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf('/#') + 1)\n }\n\n // Remove known sub-path\n const subDir = [\n '/autohold/',\n '/build/',\n '/buildset/',\n '/job/',\n '/project/',\n '/stream/',\n '/status/',\n ]\n subDir.forEach(path => {\n if (baseUrl.includes(path)) {\n baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf(path) + 1)\n }\n })\n\n // Remove tenant scope\n if (baseUrl.includes('/t/')) {\n baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf('/t/') + 1)\n }\n if (!baseUrl.endsWith('/')) {\n baseUrl = baseUrl + '/'\n }\n // console.log('Homepage url is ', baseUrl)\n return baseUrl\n}\n\nfunction getZuulUrl() {\n // Return the zuul root api absolute url\n const ZUUL_API = process.env.REACT_APP_ZUUL_API\n let apiUrl\n\n if (ZUUL_API) {\n // Api url set at build time, use it\n apiUrl = ZUUL_API\n } else {\n // Api url is relative to homepage path\n apiUrl = getHomepageUrl() + 'api/'\n }\n if (!apiUrl.endsWith('/')) {\n apiUrl = apiUrl + '/'\n }\n if (!apiUrl.endsWith('/api/')) {\n apiUrl = apiUrl + 'api/'\n }\n // console.log('Api url is ', apiUrl)\n return apiUrl\n}\nconst apiUrl = getZuulUrl()\n\n\nfunction getStreamUrl(apiPrefix) {\n const streamUrl = (apiUrl + apiPrefix)\n .replace(/(http)(s)?:\\/\\//, 'ws$2://') + 'console-stream'\n // console.log('Stream url is ', streamUrl)\n return streamUrl\n}\n\nfunction makeRequest(url, method, data) {\n if (method === undefined) {\n method = 'get'\n }\n\n // This performs a simple GET and tries to detect if CORS errors are\n // due to proxy authentication errors.\n const instance = Axios.create({\n baseURL: apiUrl\n })\n\n if (authToken) {\n instance.defaults.headers.common['Authorization'] = 'Bearer ' + authToken\n }\n\n const config = {method, url, data}\n\n // First try the request as normal\n let res = instance.request(config).catch(err => {\n if (err.response === undefined) {\n // This is either a Network, DNS, or CORS error, but we can't tell which.\n // If we're behind an authz proxy, it's possible our creds have timed out\n // and the CORS error is because we're getting a redirect.\n // Apache mod_auth_mellon (and possibly other authz proxies) will avoid\n // issuing a redirect if X-Requested-With is set to 'XMLHttpRequest' and\n // will instead issue a 403. We can use this to detect that case.\n instance.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'\n let res2 = instance.request(config).catch(err2 => {\n if (err2.response && err2.response.status === 403) {\n // We might be getting a redirect or something else,\n // so reload the page.\n console.log('Received 403 after unknown error; reloading')\n window.location.reload()\n }\n // If we're still getting an error, we don't know the cause,\n // it could be a transient network error, so we won't reload, we'll just\n // wait for it to clear.\n throw (err2)\n })\n return res2\n }\n throw (err)\n })\n return res\n}\n\n// Direct APIs\nfunction fetchInfo() {\n return makeRequest('info')\n}\n\nfunction fetchComponents() {\n return makeRequest('components')\n}\n\nfunction fetchTenantInfo(apiPrefix) {\n return makeRequest(apiPrefix + 'info')\n}\n\nfunction fetchOpenApi() {\n return Axios.get(getHomepageUrl() + 'openapi.yaml')\n}\n\nfunction fetchTenants() {\n return makeRequest(apiUrl + 'tenants')\n}\n\nfunction fetchConfigErrors(apiPrefix) {\n return makeRequest(apiPrefix + 'config-errors')\n}\n\nfunction fetchStatus(apiPrefix) {\n return makeRequest(apiPrefix + 'status')\n}\n\nfunction fetchChangeStatus(apiPrefix, changeId) {\n return makeRequest(apiPrefix + 'status/change/' + changeId)\n}\n\nfunction fetchFreezeJob(apiPrefix, pipelineName, projectName, branchName, jobName) {\n return makeRequest(apiPrefix +\n 'pipeline/' + pipelineName +\n '/project/' + projectName +\n '/branch/' + branchName +\n '/freeze-job/' + jobName)\n}\n\nfunction fetchBuild(apiPrefix, buildId) {\n return makeRequest(apiPrefix + 'build/' + buildId)\n}\n\nfunction fetchBuilds(apiPrefix, queryString) {\n let path = 'builds'\n if (queryString) {\n path += '?' + queryString.slice(1)\n }\n return makeRequest(apiPrefix + path)\n}\n\nfunction fetchBuildset(apiPrefix, buildsetId) {\n return makeRequest(apiPrefix + 'buildset/' + buildsetId)\n}\n\nfunction fetchBuildsets(apiPrefix, queryString) {\n let path = 'buildsets'\n if (queryString) {\n path += '?' + queryString.slice(1)\n }\n return makeRequest(apiPrefix + path)\n}\n\nfunction fetchPipelines(apiPrefix) {\n return makeRequest(apiPrefix + 'pipelines')\n}\n\nfunction fetchProject(apiPrefix, projectName) {\n return makeRequest(apiPrefix + 'project/' + projectName)\n}\n\nfunction fetchProjects(apiPrefix) {\n return makeRequest(apiPrefix + 'projects')\n}\n\nfunction fetchJob(apiPrefix, jobName) {\n return makeRequest(apiPrefix + 'job/' + jobName)\n}\n\nfunction fetchJobGraph(apiPrefix, projectName, pipelineName, branchName) {\n return makeRequest(apiPrefix +\n 'pipeline/' + pipelineName +\n '/project/' + projectName +\n '/branch/' + branchName +\n '/freeze-jobs')\n}\n\nfunction fetchJobs(apiPrefix) {\n return makeRequest(apiPrefix + 'jobs')\n}\n\nfunction fetchLabels(apiPrefix) {\n return makeRequest(apiPrefix + 'labels')\n}\n\nfunction fetchNodes(apiPrefix) {\n return makeRequest(apiPrefix + 'nodes')\n}\n\nfunction fetchSemaphores(apiPrefix) {\n return makeRequest(apiPrefix + 'semaphores')\n}\n\nfunction fetchAutoholds(apiPrefix) {\n return makeRequest(apiPrefix + 'autohold')\n}\n\nfunction fetchAutohold(apiPrefix, requestId) {\n return makeRequest(apiPrefix + 'autohold/' + requestId)\n}\n\nfunction fetchUserAuthorizations(apiPrefix) {\n return makeRequest(apiPrefix + 'authorizations')\n}\n\nfunction dequeue(apiPrefix, projectName, pipeline, change) {\n return makeRequest(\n apiPrefix + 'project/' + projectName + '/dequeue',\n 'post',\n {\n pipeline: pipeline,\n change: change,\n }\n )\n}\n\nfunction dequeue_ref(apiPrefix, projectName, pipeline, ref) {\n return makeRequest(\n apiPrefix + 'project/' + projectName + '/dequeue',\n 'post',\n {\n pipeline: pipeline,\n ref: ref,\n }\n )\n}\n\nfunction enqueue(apiPrefix, projectName, pipeline, change) {\n return makeRequest(\n apiPrefix + 'project/' + projectName + '/enqueue',\n 'post',\n {\n pipeline: pipeline,\n change: change,\n }\n )\n}\n\nfunction enqueue_ref(apiPrefix, projectName, pipeline, ref, oldrev, newrev) {\n return makeRequest(\n apiPrefix + 'project/' + projectName + '/enqueue',\n 'post',\n {\n pipeline: pipeline,\n ref: ref,\n oldrev: oldrev,\n newrev: newrev,\n }\n )\n}\n\nfunction autohold(apiPrefix, projectName, job, change, ref,\n reason, count, node_hold_expiration) {\n return makeRequest(\n apiPrefix + 'project/' + projectName + '/autohold',\n 'post',\n {\n change: change,\n job: job,\n ref: ref,\n reason: reason,\n count: count,\n node_hold_expiration: node_hold_expiration,\n }\n )\n}\n\nfunction autohold_delete(apiPrefix, requestId) {\n return makeRequest(\n apiPrefix + '/autohold/' + requestId,\n 'delete'\n )\n}\n\nfunction promote(apiPrefix, pipeline, changes) {\n return makeRequest(\n apiPrefix + '/promote',\n 'post',\n {\n pipeline: pipeline,\n changes: changes,\n }\n )\n}\n\n\nexport {\n apiUrl,\n getHomepageUrl,\n getStreamUrl,\n fetchChangeStatus,\n fetchConfigErrors,\n fetchStatus,\n fetchBuild,\n fetchBuilds,\n fetchBuildset,\n fetchBuildsets,\n fetchFreezeJob,\n fetchPipelines,\n fetchProject,\n fetchProjects,\n fetchJob,\n fetchJobGraph,\n fetchJobs,\n fetchLabels,\n fetchNodes,\n fetchOpenApi,\n fetchSemaphores,\n fetchTenants,\n fetchInfo,\n fetchComponents,\n fetchTenantInfo,\n fetchUserAuthorizations,\n fetchAutoholds,\n fetchAutohold,\n autohold,\n autohold_delete,\n dequeue,\n dequeue_ref,\n enqueue,\n enqueue_ref,\n promote,\n}\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport Axios from 'axios'\n\nexport const LOGFILE_FETCH_REQUEST = 'LOGFILE_FETCH_REQUEST'\nexport const LOGFILE_FETCH_SUCCESS = 'LOGFILE_FETCH_SUCCESS'\nexport const LOGFILE_FETCH_FAIL = 'LOGFILE_FETCH_FAIL'\n\nexport const requestLogfile = (url) => ({\n type: LOGFILE_FETCH_REQUEST,\n url: url,\n})\n\nconst SYSLOGDATE = '\\\\w+\\\\s+\\\\d+\\\\s+\\\\d{2}:\\\\d{2}:\\\\d{2}((\\\\.|\\\\,)\\\\d{3,6})?'\nconst DATEFMT = '\\\\d{4}-\\\\d{2}-\\\\d{2} \\\\d{2}:\\\\d{2}:\\\\d{2}((\\\\.|\\\\,)\\\\d{3,6})?'\nconst STATUSFMT = '(DEBUG|INFO|WARNING|ERROR|TRACE|AUDIT|CRITICAL)'\n\nconst severityMap = {\n DEBUG: 1,\n INFO: 2,\n WARNING: 3,\n ERROR: 4,\n TRACE: 5,\n AUDIT: 6,\n CRITICAL: 7,\n}\n\nconst OSLO_LOGMATCH = new RegExp(`^(${DATEFMT})(( \\\\d+)? (${STATUSFMT}).*)`)\nconst SYSTEMD_LOGMATCH = new RegExp(`^(${SYSLOGDATE})( (\\\\S+) \\\\S+\\\\[\\\\d+\\\\]\\\\: (${STATUSFMT}).*)`)\n\nconst receiveLogfile = (buildId, file, data) => {\n\n const out = data.split(/\\r?\\n/).map((line, idx) => {\n let m = null\n let sev = null\n\n m = SYSTEMD_LOGMATCH.exec(line)\n if (m) {\n sev = severityMap[m[7]]\n } else {\n OSLO_LOGMATCH.exec(line)\n if (m) {\n sev = severityMap[m[7]]\n }\n }\n\n return {\n text: line,\n index: idx+1,\n severity: sev\n }\n })\n return {\n type: LOGFILE_FETCH_SUCCESS,\n buildId,\n fileName: file,\n fileContent: out,\n receivedAt: Date.now()\n }\n}\n\nconst failedLogfile = (error, url) => {\n error.url = url\n return {\n type: LOGFILE_FETCH_FAIL,\n error\n }\n}\n\nexport function fetchLogfile(buildId, file, state) {\n return async function (dispatch) {\n // Don't do anything if the logfile is already part of our local state\n if (\n buildId in state.logfile.files &&\n file in state.logfile.files[buildId]\n ) {\n return Promise.resolve()\n }\n // Since this method is only called after fetchBuild() and fetchManifest(),\n // we can assume both are there.\n const build = state.build.builds[buildId]\n const manifest = state.build.manifests[buildId]\n const item = manifest.index['/' + file]\n\n if (!item) {\n return dispatch(\n failedLogfile(Error(`No manifest entry found for logfile \"${file}\"`))\n )\n }\n\n if (item.mimetype !== 'text/plain') {\n return dispatch(\n failedLogfile(Error(`Logfile \"${file}\" has invalid mimetype`))\n )\n }\n\n const url = build.log_url + file\n dispatch(requestLogfile())\n try {\n const response = await Axios.get(url, { transformResponse: [] })\n dispatch(receiveLogfile(buildId, file, response.data))\n } catch(error) {\n dispatch(failedLogfile(error, url))\n }\n }\n}\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const SEMAPHORES_FETCH_REQUEST = 'SEMAPHORES_FETCH_REQUEST'\nexport const SEMAPHORES_FETCH_SUCCESS = 'SEMAPHORES_FETCH_SUCCESS'\nexport const SEMAPHORES_FETCH_FAIL = 'SEMAPHORES_FETCH_FAIL'\n\nexport const requestSemaphores = () => ({\n type: SEMAPHORES_FETCH_REQUEST\n})\n\nexport const receiveSemaphores = (tenant, json) => ({\n type: SEMAPHORES_FETCH_SUCCESS,\n tenant: tenant,\n semaphores: json,\n receivedAt: Date.now()\n})\n\nconst failedSemaphores = error => ({\n type: SEMAPHORES_FETCH_FAIL,\n error\n})\n\nconst fetchSemaphores = (tenant) => dispatch => {\n dispatch(requestSemaphores())\n return API.fetchSemaphores(tenant.apiPrefix)\n .then(response => dispatch(receiveSemaphores(tenant.name, response.data)))\n .catch(error => dispatch(failedSemaphores(error)))\n}\n\nconst shouldFetchSemaphores = (tenant, state) => {\n const semaphores = state.semaphores.semaphores[tenant.name]\n if (!semaphores || semaphores.length === 0) {\n return true\n }\n if (semaphores.isFetching) {\n return false\n }\n return false\n}\n\nexport const fetchSemaphoresIfNeeded = (tenant, force) => (dispatch, getState) => {\n if (force || shouldFetchSemaphores(tenant, getState())) {\n return dispatch(fetchSemaphores(tenant))\n }\n return Promise.resolve()\n}\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const TENANTS_FETCH_REQUEST = 'TENANTS_FETCH_REQUEST'\nexport const TENANTS_FETCH_SUCCESS = 'TENANTS_FETCH_SUCCESS'\nexport const TENANTS_FETCH_FAIL = 'TENANTS_FETCH_FAIL'\n\nexport const requestTenants = () => ({\n type: TENANTS_FETCH_REQUEST\n})\n\nexport const receiveTenants = json => ({\n type: TENANTS_FETCH_SUCCESS,\n tenants: json,\n receivedAt: Date.now()\n})\n\nconst failedTenants = error => ({\n type: TENANTS_FETCH_FAIL,\n error\n})\n\nconst fetchTenants = () => dispatch => {\n dispatch(requestTenants())\n return API.fetchTenants()\n .then(response => dispatch(receiveTenants(response.data)))\n .catch(error => dispatch(failedTenants(error)))\n}\n\nconst shouldFetchTenants = state => {\n const tenants = state.tenants\n if (tenants.tenants.length > 0) {\n return false\n }\n if (tenants.isFetching) {\n return false\n }\n return true\n}\n\nexport const fetchTenantsIfNeeded = (force) => (dispatch, getState) => {\n if (force || shouldFetchTenants(getState())) {\n return dispatch(fetchTenants())\n }\n}\n","// Copyright 2021 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nexport const COMPONENTS_FETCH_REQUEST = 'COMPONENTS_FETCH_REQUEST'\nexport const COMPONENTS_FETCH_SUCCESS = 'COMPONENTS_FETCH_SUCCESS'\nexport const COMPONENTS_FETCH_FAIL = 'COMPONENTS_FETCH_FAIL'\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const FREEZE_JOB_FETCH_REQUEST = 'FREEZE_JOB_FETCH_REQUEST'\nexport const FREEZE_JOB_FETCH_SUCCESS = 'FREEZE_JOB_FETCH_SUCCESS'\nexport const FREEZE_JOB_FETCH_FAIL = 'FREEZE_JOB_FETCH_FAIL'\n\nexport const requestFreezeJob = () => ({\n type: FREEZE_JOB_FETCH_REQUEST\n})\n\nexport function makeFreezeJobKey(pipeline, project, branch, job) {\n return JSON.stringify({\n pipeline, project, branch, job\n })\n}\n\nexport const receiveFreezeJob = (tenant, freezeJobKey, freezeJob) => {\n return {\n type: FREEZE_JOB_FETCH_SUCCESS,\n tenant: tenant,\n freezeJobKey: freezeJobKey,\n freezeJob: freezeJob,\n receivedAt: Date.now(),\n }\n}\n\nconst failedFreezeJob = error => ({\n type: FREEZE_JOB_FETCH_FAIL,\n error\n})\n\nconst fetchFreezeJob = (tenant, pipeline, project, branch, job) => dispatch => {\n dispatch(requestFreezeJob())\n const freezeJobKey = makeFreezeJobKey(pipeline, project, branch, job)\n return API.fetchFreezeJob(tenant.apiPrefix,\n pipeline,\n project,\n branch,\n job)\n .then(response => dispatch(receiveFreezeJob(\n tenant.name, freezeJobKey, response.data)))\n .catch(error => dispatch(failedFreezeJob(error)))\n}\n\nconst shouldFetchFreezeJob = (tenant, pipeline, project, branch, job, state) => {\n const freezeJobKey = makeFreezeJobKey(pipeline, project, branch, job)\n const tenantFreezeJobs = state.freezejob.freezeJobs[tenant.name]\n if (tenantFreezeJobs) {\n const freezeJob = tenantFreezeJobs[freezeJobKey]\n if (!freezeJob) {\n return true\n }\n if (freezeJob.isFetching) {\n return false\n }\n return false\n }\n return true\n}\n\nexport const fetchFreezeJobIfNeeded = (tenant, pipeline, project, branch, job,\n force) => (\n dispatch, getState) => {\n if (force || shouldFetchFreezeJob(tenant, pipeline, project, branch, job,\n getState())) {\n return dispatch(fetchFreezeJob(tenant, pipeline, project, branch, job))\n }\n return Promise.resolve()\n}\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const JOB_GRAPH_FETCH_REQUEST = 'JOB_GRAPH_FETCH_REQUEST'\nexport const JOB_GRAPH_FETCH_SUCCESS = 'JOB_GRAPH_FETCH_SUCCESS'\nexport const JOB_GRAPH_FETCH_FAIL = 'JOB_GRAPH_FETCH_FAIL'\n\nexport const requestJobGraph = () => ({\n type: JOB_GRAPH_FETCH_REQUEST\n})\n\nexport function makeJobGraphKey(project, pipeline, branch) {\n return JSON.stringify({\n project: project, pipeline: pipeline, branch: branch\n })\n}\n\nexport const receiveJobGraph = (tenant, jobGraphKey, jobGraph) => {\n return {\n type: JOB_GRAPH_FETCH_SUCCESS,\n tenant: tenant,\n jobGraphKey: jobGraphKey,\n jobGraph: jobGraph,\n receivedAt: Date.now(),\n }\n}\n\nconst failedJobGraph = error => ({\n type: JOB_GRAPH_FETCH_FAIL,\n error\n})\n\nconst fetchJobGraph = (tenant, project, pipeline, branch) => dispatch => {\n dispatch(requestJobGraph())\n const jobGraphKey = makeJobGraphKey(project, pipeline, branch)\n return API.fetchJobGraph(tenant.apiPrefix,\n project,\n pipeline,\n branch)\n .then(response => dispatch(receiveJobGraph(\n tenant.name, jobGraphKey, response.data)))\n .catch(error => dispatch(failedJobGraph(error)))\n}\n\nconst shouldFetchJobGraph = (tenant, project, pipeline, branch, state) => {\n const jobGraphKey = makeJobGraphKey(project, pipeline, branch)\n const tenantJobGraphs = state.jobgraph.jobGraphs[tenant.name]\n if (tenantJobGraphs) {\n const jobGraph = tenantJobGraphs[jobGraphKey]\n if (!jobGraph) {\n return true\n }\n if (jobGraph.isFetching) {\n return false\n }\n return false\n }\n return true\n}\n\nexport const fetchJobGraphIfNeeded = (tenant, project, pipeline, branch,\n force) => (\n dispatch, getState) => {\n if (force || shouldFetchJobGraph(tenant, project, pipeline, branch,\n getState())) {\n return dispatch(fetchJobGraph(tenant, project, pipeline, branch))\n }\n return Promise.resolve()\n}\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read\n// https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#making-a-progressive-web-app\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n)\n\nexport default function register () {\n if (process.env.REACT_APP_ENABLE_SERVICE_WORKER !== 'true') {\n console.log('Disabled service worker')\n unregister()\n return\n }\n\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://goo.gl/SC7cgQ'\n )\n })\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl)\n }\n })\n }\n}\n\nfunction registerValidSW (swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.')\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n }\n }\n }\n }\n })\n .catch(error => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker (swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl)\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n })\n}\n\nexport function unregister () {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister()\n })\n }\n}\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\n\nimport {\n Accordion,\n AccordionItem,\n AccordionToggle,\n AccordionContent,\n Button,\n ButtonVariant,\n ClipboardCopy,\n ClipboardCopyVariant,\n Modal,\n ModalVariant\n} from '@patternfly/react-core'\nimport {\n UserIcon,\n SignInAltIcon,\n SignOutAltIcon,\n HatWizardIcon\n} from '@patternfly/react-icons'\n\nimport * as moment from 'moment'\n\nimport { apiUrl } from '../../api'\nimport { fetchUserACL } from '../../actions/user'\nimport { withAuth } from 'oidc-react'\nimport { getHomepageUrl } from '../../api'\n\n\nclass AuthContainer extends React.Component {\n static propTypes = {\n user: PropTypes.object,\n tenant: PropTypes.object,\n dispatch: PropTypes.func.isRequired,\n timezone: PropTypes.string.isRequired,\n info: PropTypes.object,\n auth: PropTypes.object,\n // Props coming from withAuth\n userManager: PropTypes.object,\n signIn: PropTypes.func,\n signOut: PropTypes.func,\n }\n\n constructor(props) {\n super(props)\n this.state = {\n isModalOpen: false,\n showZuulClientConfig: false,\n isSessionExpiredModalOpen: false,\n }\n this.handleModalToggle = () => {\n this.setState(({ isModalOpen }) => ({\n isModalOpen: !isModalOpen\n }))\n }\n this.handleSessionExpiredModalToggle = () => {\n this.setState(({ isSessionExpiredModalOpen }) => ({\n isSessionExpiredModalOpen: !isSessionExpiredModalOpen\n }))\n }\n this.handleConfigToggle = () => {\n this.setState(({ showZuulClientConfig }) => ({\n showZuulClientConfig: !showZuulClientConfig\n }))\n }\n this.onAccessTokenExpired = () => {\n // If the token has expired, show the modal\n console.debug('Token expired')\n this.setState(() => ({\n isSessionExpiredModalOpen: true,\n isModalOpen: false,\n }))\n }\n this.onUserLoaded = () => {\n // If another tab logged in while our expired modal is shown, go\n // ahead and clear it.\n console.debug('User signed in')\n this.setState(() => ({\n isSessionExpiredModalOpen: false,\n }))\n }\n }\n\n clickOnSignIn() {\n const redirect_target = window.location.href.slice(getHomepageUrl().length)\n localStorage.setItem('zuul_auth_redirect', redirect_target)\n this.props.signIn()\n }\n\n componentDidMount() {\n const { user, tenant } = this.props\n this.props.userManager.events.addAccessTokenExpired(this.onAccessTokenExpired)\n this.props.userManager.events.addUserLoaded(this.onUserLoaded)\n\n if (user.data) {\n console.log('Refreshing ACL', user.tenant, tenant.name)\n this.props.dispatch(fetchUserACL(tenant? tenant.name : null))\n }\n }\n\n componentWillUnmount() {\n this.props.userManager.events.removeAccessTokenExpired(this.onAccessTokenExpired)\n this.props.userManager.events.removeUserLoaded(this.onUserLoaded)\n }\n\n componentDidUpdate() {\n const { user, tenant } = this.props\n\n // Make sure the token is current and the tenant is up to date.\n if (user.data && user.tenant !== tenant.name) {\n console.log('Refreshing ACL', user.tenant, tenant.name)\n this.props.dispatch(fetchUserACL(tenant? tenant.name : null))\n }\n }\n\n ZuulClientConfig() {\n const { user, tenant } = this.props\n\n let ZCconfig\n ZCconfig = '[' + tenant.name + ']\\n'\n ZCconfig = ZCconfig + 'url=' + apiUrl.slice(0, -4) + '\\n'\n ZCconfig = ZCconfig + 'tenant=' + tenant.name + '\\n'\n ZCconfig = ZCconfig + 'auth_token=' + user.token + '\\n'\n\n return ZCconfig\n }\n\n renderCredentialsExpiredModal() {\n const { isSessionExpiredModalOpen } = this.state\n return \n {\n this.handleSessionExpiredModalToggle()\n this.props.signOut()\n }}>\n Your session has expired.  \n { this.clickOnSignIn() }}>\n Please renew your credentials.\n \n \n \n }\n\n renderModal() {\n const { user, tenant, timezone } = this.props\n const { isModalOpen, showZuulClientConfig } = this.state\n let config = this.ZuulClientConfig(tenant, user.data)\n let valid_until = moment.unix(user.data.expires_at).tz(timezone).format('YYYY-MM-DD HH:mm:ss')\n return (\n \n {\n this.props.signOut()\n }}\n title=\"Note that you will be logged out of Zuul, but not out of your identity provider.\">\n Sign Out  \n \n \n ]}\n >\n
\n

Name: {user.data.profile.name}

\n

Logged in as: {user.data.profile.preferred_username} \n {(user.isAdmin && user.scope.indexOf(tenant.name) !== -1) && (\n \n )}

\n \n \n \n Show Zuul Client Config\n \n \n {config}\n \n \n \n

Token expiry date: {valid_until}

\n

\n Zuul stores and uses information such as your username\n and your email to provide some features. This data is\n stored in your browser only and is\n discarded once you log out.\n

\n
\n \n
\n )\n }\n\n renderButton(containerStyles) {\n\n const { user } = this.props\n if (!user.data) {\n return (\n
\n { this.clickOnSignIn() }}>\n Sign in  \n \n \n
\n )\n } else {\n return (user.data.isFetching ?
Loading...
:\n
\n {this.renderModal()}\n \n \n  {user.data.profile.preferred_username} \n \n {this.renderCredentialsExpiredModal()}\n
\n )\n }\n }\n\n render() {\n const { info, auth } = this.props\n const textColor = '#d1d1d1'\n const containerStyles = {\n color: textColor,\n border: 'solid #2b2b2b',\n borderWidth: '0 0 0 1px',\n display: 'initial',\n padding: '6px'\n }\n\n if (info.isFetching) {\n return (<>
Fetching auth info ...
)\n }\n // auth_params.authority is only set if an OpenID Connect auth is available\n if (auth.info && auth.info.default_realm && auth.auth_params.authority) {\n return this.renderButton(containerStyles)\n } else {\n return (
-
)\n }\n }\n}\n\nexport default connect(state => ({\n auth: state.auth,\n user: state.user,\n tenant: state.tenant,\n timezone: state.timezone,\n info: state.info,\n}))(withAuth(AuthContainer))\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n\nclass ErrorBoundary extends React.Component {\n static propTypes = {\n children: PropTypes.object,\n }\n\n state = {\n hasError: false\n }\n\n componentDidCatch() {\n this.setState({\n hasError: true\n })\n }\n\n render() {\n if (this.state.hasError) {\n return

Something went wrong.

\n }\n\n return this.props.children\n }\n}\n\nexport default ErrorBoundary\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\n\nimport {\n Button,\n Title,\n EmptyState,\n EmptyStateVariant,\n Spinner,\n} from '@patternfly/react-core'\n\nimport { SyncIcon } from '@patternfly/react-icons'\n\nfunction Fetchable(props) {\n const { isFetching, fetchCallback } = props\n let content = null\n\n if (isFetching) {\n content = (\n
\n \n
\n )\n } else {\n content = (\n }\n onClick={() => {fetchCallback({force: true})}}\n style={{textDecoration: 'none'}}\n >\n refresh\n \n )\n }\n\n return (\n
\n {content}\n
\n )\n}\n\nFetchable.propTypes = {\n isFetching: PropTypes.bool,\n fetchCallback: PropTypes.func,\n}\n\nfunction Fetching() {\n return (\n \n \n \n Fetching info...\n \n \n )\n}\n\nexport { Fetchable, Fetching }\n","// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport PropTypes from 'prop-types'\nimport React from 'react'\nimport Select, { components } from 'react-select'\nimport moment from 'moment-timezone'\nimport { OutlinedClockIcon, ChevronDownIcon } from '@patternfly/react-icons'\nimport { connect } from 'react-redux'\nimport { setTimezoneAction } from '../../actions/timezone'\n\nclass SelectTz extends React.Component {\n static propTypes = {\n dispatch: PropTypes.func\n }\n\n state = {\n availableTz: moment.tz.names().map(item => ({value: item, label: item})),\n defaultValue: {value: 'UTC', label: 'UTC'}\n }\n\n componentDidMount () {\n this.loadState()\n window.addEventListener('storage', this.loadState)\n }\n\n handleChange = (selectedTz) => {\n const tz = selectedTz.value\n\n localStorage.setItem('zuul_tz_string', tz)\n this.updateState(tz)\n }\n\n loadState = () => {\n let tz = localStorage.getItem('zuul_tz_string') || ''\n if (tz) {\n this.updateState(tz)\n }\n }\n\n updateState = (tz) => {\n\n this.setState({\n currentValue: {value: tz, label: tz}\n })\n\n let timezoneAction = setTimezoneAction(tz)\n this.props.dispatch(timezoneAction)\n }\n\n render() {\n const textColor = '#fff'\n const containerStyles= {\n border: 'solid #2b2b2b',\n borderWidth: '0 0 0 1px',\n cursor: 'pointer',\n display: 'initial',\n padding: '6px'\n }\n const customStyles = {\n container: () => ({\n display: 'inline-block',\n }),\n control: () => ({\n width: 'auto',\n display: 'flex'\n }),\n singleValue: () => ({\n color: textColor,\n }),\n input: (provided) => ({\n ...provided,\n color: textColor\n }),\n dropdownIndicator:(provided) => ({\n ...provided,\n color: '#fff',\n padding: '3px',\n ':hover': {\n color: '#fff'\n }\n }),\n indicatorSeparator: () => {},\n menu: (provided) => ({\n ...provided,\n width: 'auto',\n right: '0',\n top: '22px',\n })\n }\n\n const DropdownIndicator = (props) => {\n return (\n \n \n \n )\n }\n\n return (\n
\n \n 'No api found'}\n placeholder={'Select Tz'}\n defaultValue={this.state.defaultValue}\n theme={(theme) => ({\n ...theme,\n borderRadius: 0,\n spacing: {\n ...theme.spacing,\n baseUnit: 2,\n },\n })}\n />\n
\n )\n }\n}\n\nexport default connect()(SelectTz)\n","// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport PropTypes from 'prop-types'\nimport React from 'react'\nimport { connect } from 'react-redux'\nimport {\n Button,\n ButtonVariant,\n Modal,\n ModalVariant,\n Switch\n} from '@patternfly/react-core'\nimport { CogIcon } from '@patternfly/react-icons'\nimport { setPreference } from '../../actions/preferences'\n\nclass ConfigModal extends React.Component {\n\n static propTypes = {\n location: PropTypes.object,\n tenant: PropTypes.object,\n preferences: PropTypes.object,\n timezone: PropTypes.string,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n constructor(props) {\n super(props)\n this.state = {\n isModalOpen: false,\n autoReload: false,\n }\n this.handleModalToggle = () => {\n this.setState(({ isModalOpen }) => ({\n isModalOpen: !isModalOpen\n }))\n this.resetState()\n }\n\n this.handleSave = () => {\n this.handleModalToggle()\n this.props.dispatch(setPreference('autoReload', this.state.autoReload))\n }\n\n this.handleAutoReload = () => {\n this.setState(({ autoReload }) => ({\n autoReload: !autoReload\n }))\n }\n }\n\n resetState() {\n this.setState({\n autoReload: this.props.preferences.autoReload,\n })\n }\n\n render() {\n const { isModalOpen, autoReload } = this.state\n return (\n \n \n \n \n \n Confirm\n ,\n \n ]}\n >\n
\n

Application settings are saved in browser local storage only. They are applied whether authenticated or not.

\n \n
\n \n
\n )\n }\n}\n\nexport default connect(state => ({\n preferences: state.preferences,\n}))(ConfigModal)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport { fetchConfigErrors } from '../api'\n\nexport function fetchConfigErrorsAction (tenant) {\n return (dispatch) => {\n return fetchConfigErrors(tenant.apiPrefix)\n .then(response => {\n dispatch({type: 'CONFIGERRORS_FETCH_SUCCESS',\n errors: response.data})\n })\n .catch(error => {\n dispatch({type: 'CONFIGERRORS_FETCH_FAIL',\n error})\n\n })\n }\n}\n\nexport function clearConfigErrorsAction () {\n return (dispatch) => {\n dispatch({type: 'CONFIGERRORS_CLEAR'})\n }\n}\n","// Copyright 2021 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as types from './actionTypes'\nimport * as API from '../api'\n\nfunction requestComponents() {\n return { type: types.COMPONENTS_FETCH_REQUEST }\n}\n\nfunction receiveComponents(components) {\n return { type: types.COMPONENTS_FETCH_SUCCESS, components }\n}\n\nfunction failedComponents(error) {\n return { type: types.COMPONENTS_FETCH_FAIL, error }\n}\n\nexport function fetchComponents() {\n return async function (dispatch) {\n dispatch(requestComponents())\n try {\n const response = await API.fetchComponents()\n dispatch(receiveComponents(response.data))\n } catch (error) {\n dispatch(failedComponents(error))\n }\n }\n}\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { ExternalLinkAltIcon } from '@patternfly/react-icons'\n\nfunction removeHash() {\n // Remove location hash from url\n window.history.pushState('', document.title, window.location.pathname)\n}\n\nfunction ExternalLink(props) {\n const { target } = props\n\n return (\n \n \n {props.children}\n {/* As we want the icon to be smaller than \"sm\", we have to specify the\n font-size directly */}\n \n \n \n )\n}\n\nExternalLink.propTypes = {\n target: PropTypes.string,\n children: PropTypes.node,\n}\n\nfunction buildExternalLink(buildish) {\n /* TODO (felix): What should we show for periodic builds\n here? They don't provide a change, but the ref_url is\n also not usable */\n if (buildish.ref_url && buildish.change) {\n return (\n \n Change \n {buildish.change},{buildish.patchset}\n \n )\n } else if (buildish.ref_url && buildish.newrev) {\n return (\n \n Revision \n {buildish.newrev.slice(0, 7)}\n \n )\n }\n\n return null\n}\n\nfunction buildExternalTableLink(buildish) {\n /* TODO (felix): What should we show for periodic builds\n here? They don't provide a change, but the ref_url is\n also not usable */\n if (buildish.ref_url && buildish.change) {\n return (\n \n {buildish.change},{buildish.patchset}\n \n )\n } else if (buildish.ref_url && buildish.newrev) {\n return (\n \n {buildish.newrev.slice(0, 7)}\n \n )\n }\n\n return null\n}\n\nfunction IconProperty(props) {\n const { icon, value, WrapElement = 'span' } = props\n return (\n \n \n {icon}\n \n {value}\n \n )\n}\n\nIconProperty.propTypes = {\n icon: PropTypes.node,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n WrapElement: PropTypes.func,\n}\n\n// https://github.com/kitze/conditional-wrap\n// appears to be the first implementation of this pattern\nconst ConditionalWrapper = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : children\n\nexport { IconProperty, removeHash, ExternalLink, buildExternalLink, buildExternalTableLink, ConditionalWrapper }\n","// Copyright 2021 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { capitalize } from '@patternfly/react-core'\nimport {\n expandable,\n Table,\n TableBody,\n TableHeader,\n TableVariant,\n} from '@patternfly/react-table'\nimport {\n CodeIcon,\n OnRunningIcon,\n OutlinedHddIcon,\n PauseCircleIcon,\n RunningIcon,\n QuestionIcon,\n StopCircleIcon,\n HistoryIcon,\n} from '@patternfly/react-icons'\n\nimport { IconProperty } from '../../Misc'\n\nconst STATE_ICON_CONFIGS = {\n RUNNING: {\n icon: RunningIcon,\n color: 'var(--pf-global--success-color--100)',\n },\n INITIALIZING: {\n icon: HistoryIcon,\n color: 'var(--pf-global--warning-color--100)',\n },\n PAUSED: {\n icon: PauseCircleIcon,\n color: 'var(--pf-global--warning-color--100)',\n },\n STOPPED: {\n icon: StopCircleIcon,\n color: 'var(--pf-global--danger-color--100)',\n },\n}\n\nconst DEFAULT_STATE_ICON_CONFIG = {\n icon: QuestionIcon,\n color: 'var(--pf-global--info-color--100)',\n}\n\nfunction ComponentStateIcon({ state }) {\n const iconConfig =\n STATE_ICON_CONFIGS[state.toUpperCase()] || DEFAULT_STATE_ICON_CONFIG\n const Icon = iconConfig.icon\n\n return (\n \n \n \n )\n}\n\nComponentStateIcon.propTypes = {\n state: PropTypes.string.isRequired,\n}\n\nfunction ComponentState({ state }) {\n const iconConfig =\n STATE_ICON_CONFIGS[state.toUpperCase()] || DEFAULT_STATE_ICON_CONFIG\n\n return {state.toUpperCase()}\n}\n\nComponentState.propTypes = {\n state: PropTypes.string.isRequired,\n}\n\nfunction ComponentTable({ components }) {\n // We have to keep the rows in state to be complient to how the PF4\n // expandable/collapsible table works (see the handleCollapse function).\n const [rows, setRows] = useState([])\n\n const sortComponents = (a, b) => {\n if (a.hostname < b.hostname) {\n return -1\n }\n if (a.hostname > b.hostname) {\n return 1\n }\n return 0\n }\n\n useEffect(() => {\n const createTableRows = () => {\n const allRows = []\n let i = 0\n let sectionIndex = 0\n for (const [kind, _components] of Object.entries(components)) {\n sectionIndex = i\n i++\n const sectionRows = []\n for (const component of [..._components].sort(sortComponents)) {\n sectionRows.push(createComponentRow(kind, component, sectionIndex))\n i++\n }\n allRows.push(createSectionRow(kind, sectionRows.length))\n allRows.push(...sectionRows)\n }\n\n return allRows\n }\n\n setRows(createTableRows())\n // Ensure that the effect is only called once and not after each\n // render (which would happen if no dependency array is provided).\n // But as we are changing the state during the effect, this would\n // result in an infinite render loop as every state change\n // re-renders the component.\n // Side note: We could also pass an empty depdency array here, but\n // eslint is complaining about that. So we provide the components\n // variable which is provided via props and thus doesn't change\n // during the lifetime of this react component.\n }, [components])\n\n // TODO (felix): We could change this to an expandable table and show some\n // details about the component in the expandable row. E.g. similar to what\n // OpenShift shows in for deployments and pods (metrics, performance,\n // additional attributes).\n const columns = [\n {\n title: } value=\"Hostname\" />,\n dataLabel: 'Hostname',\n cellFormaters: [expandable],\n },\n {\n title: } value=\"State\" />,\n dataLabel: 'State',\n },\n {\n title: } value=\"Version\" />,\n dataLabel: 'Version',\n },\n ]\n\n function createSectionRow(kind, childrenCount) {\n return {\n // Keep all sections open on initial page load. The handleCollapse()\n // function will deal with open/closing sections.\n isOpen: true,\n cells: [`${capitalize(kind)} (${childrenCount})`],\n }\n }\n\n function createComponentRow(kind, component, parent_id) {\n return {\n parent: parent_id,\n cells: [\n {\n title: (\n <>\n {' '}\n {component.hostname}\n \n ),\n },\n {\n title: ,\n },\n component.version,\n ],\n }\n }\n\n function handleCollapse(event, rowKey, isOpen) {\n const _rows = [...rows]\n /* Note from PF4:\n * Please do not use rowKey as row index for more complex tables.\n * Rather use some kind of identifier like ID passed with each row.\n */\n rows[rowKey].isOpen = isOpen\n setRows(_rows)\n }\n\n return (\n /* NOTE (felix): The mobile version of this expandable table looks kind of\n * broken, but the same applies to the example in the PF4 documentation:\n * https://www.patternfly.org/2020.04/documentation/react/components/table#compact-expandable\n *\n * I don't think this is something we have to attract now, but we should\n * keep this note as reference.\n */\n <>\n \n \n \n \n \n )\n}\n\nComponentTable.propTypes = {\n components: PropTypes.object.isRequired,\n}\n\nexport default ComponentTable\n","// Copyright 2021 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n EmptyState,\n EmptyStateVariant,\n EmptyStateIcon,\n PageSection,\n PageSectionVariants,\n Text,\n TextContent,\n Title,\n} from '@patternfly/react-core'\nimport { ServiceIcon } from '@patternfly/react-icons'\n\nimport { fetchComponents } from '../actions/component'\nimport { Fetching } from '../containers/Fetching'\nimport ComponentTable from '../containers/component/ComponentTable'\n\nfunction ComponentsPage({ components, isFetching, fetchComponents }) {\n useEffect(() => {\n document.title = 'Zuul Components'\n fetchComponents()\n }, [fetchComponents])\n\n // TODO (felix): Let the table handle the empty state and the fetching,\n // similar to the builds table.\n const content =\n components === undefined || isFetching ? (\n \n ) : Object.keys(components).length === 0 ? (\n \n \n \n It looks like no components are connected to ZooKeeper\n \n \n ) : (\n \n )\n\n return (\n <>\n \n \n Components\n \n This page shows all Zuul components and their current state.\n \n \n {content}\n \n \n )\n}\n\nComponentsPage.propTypes = {\n components: PropTypes.object.isRequired,\n isFetching: PropTypes.bool.isRequired,\n fetchComponents: PropTypes.func.isRequired,\n}\n\nfunction mapStateToProps(state) {\n return {\n components: state.component.components,\n isFetching: state.component.isFetching,\n }\n}\n\nconst mapDispatchToProps = { fetchComponents }\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ComponentsPage)\n","// Copyright 2020 BMW Group\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useState } from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {\n Button,\n TextInput,\n Dropdown,\n DropdownItem,\n DropdownPosition,\n DropdownToggle,\n Toolbar,\n ToolbarContent,\n ToolbarGroup,\n ToolbarItem,\n ToolbarToggleGroup,\n} from '@patternfly/react-core'\n\nimport { fetchPipelinesIfNeeded } from '../../actions/pipelines'\n\nfunction FreezeJobToolbar(props) {\n const { tenant, fetchPipelinesIfNeeded } = props\n\n useEffect(() => {\n fetchPipelinesIfNeeded(tenant)\n }, [fetchPipelinesIfNeeded, tenant])\n\n const tenantPipelines = props.pipelines.pipelines[tenant.name]\n const pipelines = tenantPipelines ? tenantPipelines.map(p => { return p.name }) : []\n\n const [isPipelineOpen, setIsPipelineOpen] = useState(false)\n const [currentPipeline, setCurrentPipeline] = useState(props.defaultPipeline || '')\n const [currentProject, setCurrentProject] = useState(props.defaultProject || '')\n const [currentBranch, setCurrentBranch] = useState(props.defaultBranch || '')\n const [currentJob, setCurrentJob] = useState(props.defaultJob || '')\n\n if (!currentPipeline && pipelines.length) {\n // We may have gotten a list of pipelines after we loaded the page\n setCurrentPipeline(pipelines[0])\n }\n\n function handlePipelineSelect(event) {\n setCurrentPipeline(event.target.innerText)\n setIsPipelineOpen(false)\n }\n\n function handlePipelineToggle(isOpen) {\n setIsPipelineOpen(isOpen)\n }\n\n function handleProjectChange(newValue) {\n setCurrentProject(newValue)\n }\n\n function handleBranchChange(newValue) {\n setCurrentBranch(newValue)\n }\n\n function handleJobChange(newValue) {\n setCurrentJob(newValue)\n }\n\n function handleInputSend(event) {\n // In case the event comes from a key press, only accept \"Enter\"\n if (event.key && event.key !== 'Enter') {\n return\n }\n\n // Ignore empty values\n if (!currentBranch || !currentProject || !currentJob) {\n return\n }\n\n // Notify the parent component about the filter change\n props.onChange(currentPipeline, currentProject, currentBranch, currentJob)\n }\n\n function renderFreezeJobToolbar () {\n return <>\n \n \n \n \n\n \n \n Pipeline: {currentPipeline}\n \n }\n isOpen={isPipelineOpen}\n dropdownItems={pipelines.map((pipeline) => (\n {pipeline}\n ))}\n style={{ width: '100%' }}\n menuAppendTo={document.body}\n />\n \n\n \n handleInputSend(event)}\n />\n \n\n \n handleInputSend(event)}\n />\n \n\n \n handleInputSend(event)}\n />\n \n\n \n handleInputSend(event)}\n >\n Freeze Job\n \n \n\n \n \n \n \n \n }\n\n return (\n
\n {renderFreezeJobToolbar()}\n
\n )\n}\n\nFreezeJobToolbar.propTypes = {\n fetchPipelinesIfNeeded: PropTypes.func,\n tenant: PropTypes.object,\n pipelines: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n defaultPipeline: PropTypes.string,\n defaultProject: PropTypes.string,\n defaultBranch: PropTypes.string,\n defaultJob: PropTypes.string,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n pipelines: state.pipelines,\n }\n}\n\nconst mapDispatchToProps = {\n fetchPipelinesIfNeeded\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FreezeJobToolbar)\n","// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport {\n PageSection,\n PageSectionVariants,\n Text,\n TextContent,\n} from '@patternfly/react-core'\nimport ReactJson from 'react-json-view'\n\nimport FreezeJobToolbar from '../containers/freezejob/FreezeJobToolbar'\nimport { makeFreezeJobKey, fetchFreezeJobIfNeeded } from '../actions/freezejob'\n\nfunction FreezeJobPage(props) {\n const { tenant, fetchFreezeJobIfNeeded } = props\n\n const [currentPipeline, setCurrentPipeline] = useState()\n const [currentProject, setCurrentProject] = useState()\n const [currentBranch, setCurrentBranch] = useState()\n const [currentJob, setCurrentJob] = useState()\n const history = useHistory()\n const location = useLocation()\n\n if (!currentBranch) {\n const urlParams = new URLSearchParams(location.search)\n const pipeline = urlParams.get('pipeline')\n const project = urlParams.get('project')\n const branch = urlParams.get('branch')\n const job = urlParams.get('job')\n if (pipeline && branch && project && job) {\n setCurrentPipeline(pipeline)\n setCurrentProject(project)\n setCurrentBranch(branch)\n setCurrentJob(job)\n }\n }\n\n useEffect(() => {\n document.title = 'Zuul Frozen Job'\n if (currentPipeline && currentProject && currentBranch && currentJob) {\n fetchFreezeJobIfNeeded(tenant, currentPipeline, currentProject,\n currentBranch, currentJob)\n }\n }, [fetchFreezeJobIfNeeded, tenant, currentPipeline, currentProject,\n currentBranch, currentJob])\n\n function onChange(pipeline, project, branch, job) {\n setCurrentPipeline(pipeline)\n setCurrentProject(project)\n setCurrentBranch(branch)\n setCurrentJob(job)\n\n const searchParams = new URLSearchParams('')\n searchParams.append('pipeline', pipeline)\n searchParams.append('project', project)\n searchParams.append('branch', branch)\n searchParams.append('job', job)\n history.push({\n pathname: location.pathname,\n search: searchParams.toString(),\n })\n\n if (currentPipeline && currentProject && currentBranch && currentJob) {\n fetchFreezeJobIfNeeded(tenant, currentPipeline, currentProject,\n currentBranch, currentJob)\n }\n }\n\n const tenantJobs = props.freezejob.freezeJobs[tenant.name]\n const freezeJobKey = makeFreezeJobKey(currentPipeline,\n currentProject,\n currentBranch,\n currentJob)\n const job = tenantJobs ? tenantJobs[freezeJobKey] : undefined\n function renderFrozenJob() {\n return (\n \n \n \n )\n }\n\n return (\n <>\n \n \n Freeze Job\n \n Freezing a job asks Zuul to combine all the\n project and job configuration\n stanzas for a job as if a change for a given\n project and branch were to be enqueued into\n a specific pipeline. The resulting job\n configuration is displayed below.\n \n \n \n {job && renderFrozenJob(job)}\n \n \n )\n}\n\nFreezeJobPage.propTypes = {\n fetchFreezeJobIfNeeded: PropTypes.func,\n tenant: PropTypes.object,\n freezejob: PropTypes.object,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n freezejob: state.freezejob,\n }\n}\n\nconst mapDispatchToProps = {\n fetchFreezeJobIfNeeded\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FreezeJobPage)\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nexport const ADMIN_DEQUEUE_FAIL = 'ADMIN_DEQUEUE_FAIL'\nexport const ADMIN_ENQUEUE_FAIL = 'ADMIN_ENQUEUE_FAIL'\nexport const ADMIN_AUTOHOLD_FAIL = 'ADMIN_AUTOHOLD_FAIL'\nexport const ADMIN_PROMOTE_FAIL = 'ADMIN_PROMOTE_FAIL'\n\nfunction parseAPIerror(error) {\n if (error.response) {\n let parser = new DOMParser()\n let htmlError = parser.parseFromString(error.response.data, 'text/html')\n let error_description = htmlError.getElementsByTagName('p')[0].innerText\n return (error_description)\n } else {\n return (error)\n }\n}\n\nexport const addDequeueError = error => ({\n type: ADMIN_DEQUEUE_FAIL,\n notification: parseAPIerror(error)\n})\n\nexport const addEnqueueError = error => ({\n type: ADMIN_ENQUEUE_FAIL,\n notification: parseAPIerror(error)\n})\n\nexport const addAutoholdError = error => ({\n type: ADMIN_AUTOHOLD_FAIL,\n notification: parseAPIerror(error)\n})\n\nexport const addPromoteError = error => ({\n type: ADMIN_PROMOTE_FAIL,\n notification: parseAPIerror(error)\n})","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport * as moment from 'moment'\nimport 'moment-duration-format'\nimport { Button } from '@patternfly/react-core'\n\n\nclass ChangePanel extends React.Component {\n static propTypes = {\n globalExpanded: PropTypes.bool.isRequired,\n change: PropTypes.object.isRequired,\n tenant: PropTypes.object\n }\n\n constructor () {\n super()\n this.state = {\n expanded: false,\n showSkipped: false,\n }\n this.onClick = this.onClick.bind(this)\n this.toggleSkippedJobs = this.toggleSkippedJobs.bind(this)\n this.clicked = false\n }\n\n onClick (e) {\n // Skip middle mouse button\n if (e.button === 1) {\n return\n }\n let expanded = this.state.expanded\n if (!this.clicked) {\n expanded = this.props.globalExpanded\n }\n this.clicked = true\n this.setState({ expanded: !expanded })\n }\n\n time (ms) {\n return moment.duration(ms).format({\n template: 'h [hr] m [min]',\n largest: 2,\n minValue: 1,\n usePlural: false,\n })\n }\n\n enqueueTime (ms) {\n // Special format case for enqueue time to add style\n let hours = 60 * 60 * 1000\n let now = Date.now()\n let delta = now - ms\n let status = 'text-success'\n let text = this.time(delta)\n if (delta > (4 * hours)) {\n status = 'text-danger'\n } else if (delta > (2 * hours)) {\n status = 'text-warning'\n }\n return {text}\n }\n\n jobStrResult (job) {\n let result = job.result ? job.result.toLowerCase() : null\n if (result === null) {\n if (job.url === null) {\n if (job.queued === false) {\n result = 'waiting'\n } else {\n result = 'queued'\n }\n } else if (job.paused !== null && job.paused) {\n result = 'paused'\n } else {\n result = 'in progress'\n }\n }\n return result\n }\n\n renderChangeLink (change) {\n let changeId = change.id || 'NA'\n let changeTitle = changeId\n // Fall back to display the ref if there is no change id\n if (changeId === 'NA' && change.ref) {\n changeTitle = change.ref\n }\n let changeText = ''\n if (change.url !== null) {\n let githubId = changeId.match(/^([0-9]+),([0-9a-f]{40})$/)\n if (githubId) {\n changeTitle = githubId\n changeText = '#' + githubId[1]\n } else if (/^[0-9a-f]{40}$/.test(changeId)) {\n changeText = changeId.slice(0, 7)\n }\n } else if (changeId.length === 40) {\n changeText = changeId.slice(0, 7)\n }\n return (\n \n \n {changeText !== '' ? (\n {changeText}) : changeTitle}\n \n )\n }\n\n renderProgressBar (change) {\n const interesting_jobs = change.jobs.filter(j => this.jobStrResult(j) !== 'skipped')\n let jobPercent = (100 / interesting_jobs.length).toFixed(2)\n return (\n
\n {change.jobs.map((job, idx) => {\n let result = this.jobStrResult(job)\n if (['queued', 'waiting', 'skipped'].includes(result)) {\n return ''\n }\n let className = ''\n switch (result) {\n case 'success':\n className = ' progress-bar-success'\n break\n case 'lost':\n case 'failure':\n className = ' progress-bar-danger'\n break\n case 'unstable':\n case 'retry_limit':\n case 'post_failure':\n case 'node_failure':\n className = ' progress-bar-warning'\n break\n case 'paused':\n className = ' progress-bar-info'\n break\n default:\n break\n }\n return
\n })}\n
\n )\n }\n\n renderTimer (change, times) {\n let remainingTime\n if (times.remaining === null) {\n remainingTime = 'unknown'\n } else {\n remainingTime = this.time(times.remaining)\n }\n return (\n \n \n {remainingTime}\n \n
\n \n {this.enqueueTime(change.enqueue_time)}\n \n
\n )\n }\n\n renderJobProgressBar (elapsedTime, remainingTime) {\n let progressPercent = 100 * (elapsedTime / (elapsedTime +\n remainingTime))\n // Show animation in preparation phase\n let className\n let progressWidth = progressPercent\n let title = ''\n let remaining = remainingTime\n if (Number.isNaN(progressPercent)) {\n progressWidth = 100\n progressPercent = 0\n className = 'progress-bar-striped progress-bar-animated'\n }\n if (remaining !== null) {\n title = 'Estimated time remaining: ' + moment.duration(remaining).format({\n template: 'd [days] h [hours] m [minutes] s [seconds]',\n largest: 2,\n minValue: 30,\n })\n }\n\n return (\n
\n
\n
\n )\n }\n\n renderJobStatusLabel (job, result) {\n let className, title\n switch (result) {\n case 'success':\n className = 'label-success'\n break\n case 'failure':\n className = 'label-danger'\n break\n case 'unstable':\n case 'retry_limit':\n case 'post_failure':\n case 'node_failure':\n className = 'label-warning'\n break\n case 'paused':\n case 'skipped':\n className = 'label-info'\n break\n case 'waiting':\n className = 'label-default'\n if (job.waiting_status !== null) {\n title = 'Waiting on ' + job.waiting_status\n }\n break\n case 'queued':\n className = 'label-default'\n if (job.waiting_status !== null) {\n title = 'Waiting on ' + job.waiting_status\n }\n break\n // 'in progress' 'lost' 'aborted' ...\n default:\n className = 'label-default'\n }\n\n return (\n {result}\n )\n }\n\n renderJob (job, job_times) {\n const { tenant } = this.props\n let job_name = job.name\n let ordinal_rules = new Intl.PluralRules('en', {type: 'ordinal'})\n const suffixes = {\n one: 'st',\n two: 'nd',\n few: 'rd',\n other: 'th'\n }\n if (job.tries > 1) {\n job_name = job_name + ' (' + job.tries + suffixes[ordinal_rules.select(job.tries)] + ' attempt)'\n }\n let name = ''\n if (job.result !== null) {\n name = {job_name}\n } else if (job.url !== null) {\n let url = job.url\n if (job.url.match('stream/')) {\n const to = (\n tenant.linkPrefix + '/' + job.url\n )\n name = {job_name}\n } else {\n name = {job_name}\n }\n } else {\n name = {job_name}\n }\n let resultBar\n let result = this.jobStrResult(job)\n if (result === 'in progress') {\n resultBar = this.renderJobProgressBar(job_times.elapsed, job_times.remaining)\n } else {\n resultBar = this.renderJobStatusLabel(job, result)\n }\n\n return (\n \n {name}\n {resultBar}\n {job.voting === false ? (\n (non-voting)) : ''}\n
\n )\n }\n\n toggleSkippedJobs (e) {\n // Skip middle mouse button\n if (e.button === 1) {\n return\n }\n this.setState({ showSkipped: !this.state.showSkipped })\n }\n\n renderJobList (jobs, times) {\n const [buttonText, interestingJobs] = this.state.showSkipped ?\n ['Hide', jobs] :\n ['Show', jobs.filter(j => this.jobStrResult(j) !== 'skipped')]\n const skippedJobCount = jobs.length - interestingJobs.length\n\n return (\n <>\n
    \n {interestingJobs.map((job, idx) => (\n
  • \n {this.renderJob(job, times.jobs[job.name])}\n
  • \n ))}\n {(this.state.showSkipped || skippedJobCount) ? (\n
  • \n \n
  • \n ) : ''}\n
\n \n )\n }\n\n calculateTimes (change) {\n let maxRemaining = 0\n let jobs = {}\n const now = Date.now()\n\n for (const job of change.jobs) {\n let jobElapsed = null\n let jobRemaining = null\n if (job.start_time) {\n let jobStart = parseInt(job.start_time * 1000)\n\n if (job.end_time) {\n let jobEnd = parseInt(job.end_time * 1000)\n jobElapsed = jobEnd - jobStart\n } else {\n jobElapsed = Math.max(now - jobStart, 0)\n if (job.estimated_time) {\n jobRemaining = Math.max(parseInt(job.estimated_time * 1000) - jobElapsed, 0)\n }\n }\n }\n if (jobRemaining && jobRemaining > maxRemaining) {\n maxRemaining = jobRemaining\n }\n jobs[job.name] = {\n elapsed: jobElapsed,\n remaining: jobRemaining,\n }\n }\n // If not all the jobs have started, this will be null, so only\n // use our value if it's oky to calculate it.\n if (change.remaininging_time === null) {\n maxRemaining = null\n }\n return {\n remaining: maxRemaining,\n jobs: jobs,\n }\n }\n\n render () {\n const { expanded } = this.state\n const { change, globalExpanded } = this.props\n let expand = globalExpanded\n if (this.clicked) {\n expand = expanded\n }\n const times = this.calculateTimes(change)\n const header = (\n
\n
\n
\n
\n {change.project}\n
\n
\n {this.renderChangeLink(change)}\n
\n
\n {this.renderProgressBar(change)}\n
\n
\n
\n {change.live === true ? (\n
\n {this.renderTimer(change, times)}\n
\n ) : ''}\n
\n
\n {expand ? this.renderJobList(change.jobs, times) : ''}\n
\n )\n return (\n \n {header}\n \n )\n }\n}\n\nexport default connect(state => ({tenant: state.tenant}))(ChangePanel)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\n\nimport {\n Button,\n Dropdown,\n DropdownItem,\n KebabToggle,\n Modal,\n ModalVariant\n} from '@patternfly/react-core'\nimport {\n AngleDoubleUpIcon,\n BanIcon,\n} from '@patternfly/react-icons'\nimport { dequeue, dequeue_ref, promote } from '../../api'\nimport { addDequeueError, addPromoteError } from '../../actions/adminActions'\n\nimport { addNotification } from '../../actions/notifications'\nimport { fetchStatusIfNeeded } from '../../actions/status'\n\nimport LineAngleImage from '../../images/line-angle.png'\nimport LineTImage from '../../images/line-t.png'\nimport ChangePanel from './ChangePanel'\n\n\nclass Change extends React.Component {\n static propTypes = {\n change: PropTypes.object.isRequired,\n queue: PropTypes.object.isRequired,\n expanded: PropTypes.bool.isRequired,\n pipeline: PropTypes.object,\n tenant: PropTypes.object,\n user: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n state = {\n showDequeueModal: false,\n showPromoteModal: false,\n showAdminActions: false,\n }\n\n dequeueConfirm = () => {\n const { tenant, change, pipeline } = this.props\n let projectName = change.project\n let changeId = change.id || 'N/A'\n let changeRef = change.ref\n this.setState(() => ({ showDequeueModal: false }))\n // post-merge\n if (/^[0-9a-f]{40}$/.test(changeId)) {\n dequeue_ref(tenant.apiPrefix, projectName, pipeline.name, changeRef)\n .then(() => {\n this.props.dispatch(fetchStatusIfNeeded(tenant))\n })\n .catch(error => {\n this.props.dispatch(addDequeueError(error))\n })\n // pre-merge, ie we have a change id\n } else if (changeId !== 'N/A') {\n dequeue(tenant.apiPrefix, projectName, pipeline.name, changeId)\n .then(() => {\n this.props.dispatch(fetchStatusIfNeeded(tenant))\n })\n .catch(error => {\n this.props.dispatch(addDequeueError(error))\n })\n } else {\n this.props.dispatch(addNotification({\n url: null,\n status: 'Invalid change ' + changeRef + ' on project ' + projectName,\n text: '',\n type: 'error',\n }))\n }\n }\n\n dequeueCancel = () => {\n this.setState(() => ({ showDequeueModal: false }))\n }\n\n renderDequeueModal() {\n const { showDequeueModal } = this.state\n const { change } = this.props\n let projectName = change.project\n let changeId = change.id || change.ref\n const title = 'You are about to dequeue a change'\n return (\n Confirm,\n ,\n ]}>\n

Please confirm that you want to cancel all ongoing builds on change {changeId} for project {projectName}.

\n \n )\n }\n\n promoteConfirm = () => {\n const { tenant, change, pipeline } = this.props\n let changeId = change.id || 'NA'\n this.setState(() => ({ showPromoteModal: false }))\n if (changeId !== 'N/A') {\n promote(tenant.apiPrefix, pipeline.name, [changeId,])\n .then(() => {\n this.props.dispatch(fetchStatusIfNeeded(tenant))\n })\n .catch(error => {\n this.props.dispatch(addPromoteError(error))\n })\n } else {\n this.props.dispatch(addNotification({\n url: null,\n status: 'Invalid change ' + changeId + ' for promotion',\n text: '',\n type: 'error'\n }))\n }\n }\n\n promoteCancel = () => {\n this.setState(() => ({ showPromoteModal: false }))\n }\n\n renderPromoteModal() {\n const { showPromoteModal } = this.state\n const { change } = this.props\n let changeId = change.id || 'N/A'\n const title = 'You are about to promote a change'\n return (\n Confirm,\n ,\n ]}>\n

Please confirm that you want to promote change {changeId}.

\n \n )\n }\n\n renderAdminCommands(idx) {\n const { showAdminActions } = this.state\n const { queue } = this.props\n const dropdownCommands = [\n }\n description=\"Stop all jobs for this change\"\n onClick={(event) => {\n event.preventDefault()\n this.setState(() => ({ showDequeueModal: true }))\n }}\n >Dequeue,\n }\n description=\"Promote this change to the top of the queue\"\n onClick={(event) => {\n event.preventDefault()\n this.setState(() => ({ showPromoteModal: true }))\n }}\n >Promote\n ]\n return (\n {\n this.setState({ showAdminActions: !showAdminActions })\n const element = document.getElementById('toggle-id-' + idx + '-' + queue.uuid)\n element.focus()\n }}\n dropdownItems={dropdownCommands}\n isPlain\n toggle={\n {\n this.setState({ showAdminActions })\n }}\n id={'toggle-id-' + idx + '-' + queue.uuid} />\n }\n />\n )\n\n }\n\n\n renderStatusIcon(change) {\n let iconGlyph = 'pficon pficon-ok'\n let iconTitle = 'Succeeding'\n if (change.active !== true) {\n iconGlyph = 'pficon pficon-pending'\n iconTitle = 'Waiting until closer to head of queue to' +\n ' start jobs'\n } else if (change.live !== true) {\n iconGlyph = 'pficon pficon-info'\n iconTitle = 'Dependent change required for testing'\n } else if (change.failing_reasons &&\n change.failing_reasons.length > 0) {\n let reason = change.failing_reasons.join(', ')\n iconTitle = 'Failing because ' + reason\n if (reason.match(/merge conflict/)) {\n iconGlyph = 'pficon pficon-error-circle-o zuul-build-merge-conflict'\n } else {\n iconGlyph = 'pficon pficon-error-circle-o'\n }\n }\n const icon = (\n \n )\n if (change.live) {\n return (\n \n {icon}\n \n )\n } else {\n return icon\n }\n }\n\n renderLineImg(change, i) {\n let image = LineTImage\n if (change._tree_branches.indexOf(i) === change._tree_branches.length - 1) {\n // Angle line\n image = LineAngleImage\n }\n return \"Line\"\n }\n\n render() {\n const { change, queue, expanded, pipeline, user, tenant } = this.props\n let row = []\n let adminMenuWidth = 15\n let i\n for (i = 0; i < queue._tree_columns; i++) {\n let className = ''\n if (i < change._tree.length && change._tree[i] !== null) {\n className = ' zuul-change-row-line'\n }\n row.push(\n \n {i === change._tree_index ? this.renderStatusIcon(change) : ''}\n {change._tree_branches.indexOf(i) !== -1 ? (\n this.renderLineImg(change, i)) : ''}\n )\n }\n let changeWidth = (user.isAdmin && user.scope.indexOf(tenant.name) !== -1)\n ? 360 - adminMenuWidth - 16 * queue._tree_columns\n : 360 - 16 * queue._tree_columns\n row.push(\n \n \n \n )\n if (user.isAdmin && user.scope.indexOf(tenant.name) !== -1) {\n row.push(\n \n {this.renderAdminCommands(i + 2)}\n \n )\n }\n\n return (\n <>\n \n \n {row}\n \n
\n {this.renderDequeueModal()}\n {this.renderPromoteModal()}\n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n user: state.user,\n}))(Change)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\n\nimport Change from './Change'\n\n\nclass ChangeQueue extends React.Component {\n static propTypes = {\n pipeline: PropTypes.object.isRequired,\n queue: PropTypes.object.isRequired,\n expanded: PropTypes.bool.isRequired\n }\n\n render() {\n const { queue, pipeline, expanded } = this.props\n let fullName = queue.name\n if (queue.branch) {\n fullName = `${fullName} (${queue.branch})`\n }\n let shortName = fullName\n if (shortName.length > 32) {\n shortName = shortName.substr(0, 32) + '...'\n }\n let changesList = []\n queue.heads.forEach((changes, changeIdx) => {\n changes.forEach((change, idx) => {\n changesList.push(\n )\n })\n })\n return (\n
\n

Queue: {shortName}

\n {changesList}\n
)\n }\n}\n\nexport default ChangeQueue\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { Badge } from 'patternfly-react'\nimport { Title, Tooltip } from '@patternfly/react-core'\n\nimport ChangeQueue from './ChangeQueue'\n\nimport {\n CodeBranchIcon,\n FlaskIcon,\n SortAmountDownIcon,\n BundleIcon,\n StreamIcon,\n} from '@patternfly/react-icons'\n\n/*\n Note: the documentation links are unused at the moment, but kept for convenience. We might figure a way to\n use these at some point.\n*/\nconst PIPELINE_ICONS = {\n dependent: {\n icon: CodeBranchIcon,\n help_title: 'Dependent Pipeline',\n help: 'A dependent pipeline ensures that every change is tested exactly in the order it is going to be merged into the repository.',\n doc_url: 'https://zuul-ci.org/docs/zuul/reference/pipeline_def.html#value-pipeline.manager.dependent',\n },\n independent: {\n icon: FlaskIcon,\n help_title: 'Independent Pipeline',\n help: 'An independent pipeline treats every change as independent of other changes in it.',\n doc_url: 'https://zuul-ci.org/docs/zuul/reference/pipeline_def.html#value-pipeline.manager.independent',\n },\n serial: {\n icon: SortAmountDownIcon,\n help_title: 'Serial Pipeline',\n help: 'A serial pipeline supports shared queues, but only one item in each shared queue is processed at a time.',\n doc_url: 'https://zuul-ci.org/docs/zuul/reference/pipeline_def.html#value-pipeline.manager.serial',\n },\n supercedent: {\n icon: BundleIcon,\n help_title: 'Supercedent Pipeline',\n help: 'A supercedent pipeline groups items by project and ref, and processes only one item per grouping at a time. Only two items (currently processing and latest) can be queued per grouping.',\n doc_url: 'https://zuul-ci.org/docs/zuul/reference/pipeline_def.html#value-pipeline.manager.supercedent',\n },\n unknown: {\n icon: StreamIcon,\n help_title: '?',\n help: 'Unknown pipeline type',\n doc_url: 'https://zuul-ci.org/docs/zuul/reference/pipeline_def.html'\n },\n}\n\nconst DEFAULT_PIPELINE_ICON = PIPELINE_ICONS['unknown']\n\nclass Pipeline extends React.Component {\n static propTypes = {\n expanded: PropTypes.bool.isRequired,\n pipeline: PropTypes.object.isRequired,\n filter: PropTypes.string\n }\n\n createTree(pipeline) {\n let count = 0\n let pipelineMaxTreeColumns = 1\n pipeline.change_queues.forEach(changeQueue => {\n let tree = []\n let maxTreeColumns = 1\n let changes = []\n let lastTreeLength = 0\n changeQueue.heads.forEach(head => {\n head.forEach((change, changeIndex) => {\n changes[change.id] = change\n change._tree_position = changeIndex\n })\n })\n // Generate a unique identifier for each queues\n changeQueue.uuid = Object.keys(changes).join('-')\n changeQueue.heads.forEach(head => {\n head.forEach(change => {\n if (change.live === true) {\n count += 1\n }\n let idx = tree.indexOf(change.id)\n if (idx > -1) {\n change._tree_index = idx\n // remove...\n tree[idx] = null\n while (tree[tree.length - 1] === null) {\n tree.pop()\n }\n } else {\n change._tree_index = 0\n }\n change._tree_branches = []\n change._tree = []\n if (typeof (change.items_behind) === 'undefined') {\n change.items_behind = []\n }\n change.items_behind.sort(function (a, b) {\n return (changes[b]._tree_position - changes[a]._tree_position)\n })\n change.items_behind.forEach(id => {\n tree.push(id)\n if (tree.length > lastTreeLength && lastTreeLength > 0) {\n change._tree_branches.push(tree.length - 1)\n }\n })\n if (tree.length > maxTreeColumns) {\n maxTreeColumns = tree.length\n }\n if (tree.length > pipelineMaxTreeColumns) {\n pipelineMaxTreeColumns = tree.length\n }\n change._tree = tree.slice(0) // make a copy\n lastTreeLength = tree.length\n })\n })\n changeQueue._tree_columns = maxTreeColumns\n })\n pipeline._tree_columns = pipelineMaxTreeColumns\n return count\n }\n\n filterQueue(queue, filter) {\n let found = false\n let filters = filter.replace(/ +/g, ',').split(',')\n queue.heads.forEach(changes => {\n changes.forEach(change => {\n filters.forEach(changeFilter => {\n if (changeFilter && (\n (change.project && change.project.indexOf(changeFilter) !== -1) ||\n (change.id && change.id.indexOf(changeFilter) !== -1))) {\n found = true\n return\n }\n })\n if (found) {\n return\n }\n })\n if (found) {\n return\n }\n })\n return found\n }\n\n renderPipelineName() {\n const { pipeline } = this.props\n let pipeline_type = pipeline.manager || 'unknown'\n\n const pl_config = PIPELINE_ICONS[pipeline_type] || DEFAULT_PIPELINE_ICON\n const Icon = pl_config.icon\n return (\n <>\n {pl_config.help_title}

{pl_config.help}

}\n >\n \n \n  \n {pipeline.name}\n \n )\n }\n\n render() {\n const { pipeline, filter, expanded } = this.props\n const count = this.createTree(pipeline)\n return (\n
\n
\n \n {this.renderPipelineName()} <Badge>{count}</Badge>\n \n {pipeline.description ? (\n \n

{pipeline.description.split(/\\r?\\n\\r?\\n/)}

\n
) : ''}\n Unprocessed pipeline specific events
}>\n \n \n Events: \n {pipeline.trigger_events} trigger events, \n {pipeline.management_events} management events, \n {pipeline.result_events} results.\n \n \n \n
\n {pipeline.change_queues.filter(item => item.heads.length > 0)\n .filter(item => (!filter || (\n filter.indexOf(pipeline.name) !== -1 ||\n this.filterQueue(item, filter)\n )))\n .map(changeQueue => (\n \n ))}\n
\n )\n }\n}\n\nexport default Pipeline\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as moment from 'moment-timezone'\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n Checkbox,\n Icon,\n Form,\n FormGroup,\n FormControl,\n} from 'patternfly-react'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchStatusIfNeeded } from '../actions/status'\nimport Pipeline from '../containers/status/Pipeline'\nimport { Fetchable } from '../containers/Fetching'\nimport { removeHash } from '../Misc'\n\n\nclass StatusPage extends React.Component {\n static propTypes = {\n location: PropTypes.object,\n tenant: PropTypes.object,\n preferences: PropTypes.object,\n timezone: PropTypes.string,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n state = {\n filter: null,\n expanded: false,\n }\n\n visibilityListener = () => {\n if (document[this.visibilityStateProperty] === 'visible') {\n this.visible = true\n this.updateData()\n } else {\n this.visible = false\n }\n }\n\n constructor () {\n super()\n\n this.timer = null\n this.visible = true\n\n // Stop refresh when page is not visible\n if (typeof document.hidden !== 'undefined') {\n this.visibilityChangeEvent = 'visibilitychange'\n this.visibilityStateProperty = 'visibilityState'\n } else if (typeof document.mozHidden !== 'undefined') {\n this.visibilityChangeEvent = 'mozvisibilitychange'\n this.visibilityStateProperty = 'mozVisibilityState'\n } else if (typeof document.msHidden !== 'undefined') {\n this.visibilityChangeEvent = 'msvisibilitychange'\n this.visibilityStateProperty = 'msVisibilityState'\n } else if (typeof document.webkitHidden !== 'undefined') {\n this.visibilityChangeEvent = 'webkitvisibilitychange'\n this.visibilityStateProperty = 'webkitVisibilityState'\n }\n document.addEventListener(\n this.visibilityChangeEvent, this.visibilityListener, false)\n }\n\n updateData = (force) => {\n if (force || (this.visible && this.props.preferences.autoReload)) {\n this.props.dispatch(fetchStatusIfNeeded(this.props.tenant))\n .then(() => {if (this.props.preferences.autoReload && this.visible) {\n this.timer = setTimeout(this.updateData, 5000)\n }})\n }\n // Clear any running timer\n if (this.timer) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n\n componentDidMount () {\n document.title = 'Zuul Status'\n this.loadState()\n if (this.props.tenant.name) {\n this.updateData(true)\n }\n window.addEventListener('storage', this.loadState)\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData(true)\n }\n // If the user just enabled auto-reload\n if (this.props.preferences.autoReload &&\n !prevProps.preferences.autoReload &&\n !this.timer) {\n this.updateData(true)\n }\n }\n\n componentWillUnmount () {\n if (this.timer) {\n clearTimeout(this.timer)\n this.timer = null\n }\n this.visible = false\n document.removeEventListener(\n this.visibilityChangeEvent, this.visibilityListener)\n }\n\n setFilter = (filter) => {\n // Update form ref value\n this.filter.value = filter\n // Store value in location\n if (filter) {\n window.location.hash = '#' + filter\n } else {\n removeHash()\n }\n this.setState({filter: filter})\n }\n\n handleKeyPress = (e) => {\n if (e.charCode === 13) {\n this.setFilter(e.target.value)\n e.preventDefault()\n e.target.blur()\n }\n }\n\n handleCheckBox = (e) => {\n this.setState({expanded: e.target.checked})\n localStorage.setItem('zuul_expand_by_default', e.target.checked)\n }\n\n loadState = () => {\n const filter = this.props.location.hash ? this.props.location.hash.slice(1) : null\n let expanded = localStorage.getItem('zuul_expand_by_default') || false\n if (typeof expanded === 'string') {\n expanded = (expanded === 'true')\n }\n if (filter || expanded) {\n this.setState({\n filter: filter,\n expanded: expanded\n })\n }\n }\n\n renderStatusHeader (status) {\n return (\n

\n Queue lengths: {status.trigger_event_queue ?\n status.trigger_event_queue.length : '0'\n } events, \n {status.management_event_queue ?\n status.management_event_queue.length : '0'\n } management events.\n

\n )\n }\n\n renderStatusFooter (status) {\n return (\n \n

Zuul version: {status.zuul_version}

\n {status.last_reconfigured ? (\n

Last reconfigured: \n {moment.utc(status.last_reconfigured).tz(this.props.timezone).format('llll')}\n

) : ''}\n
\n )\n }\n\n render () {\n const { remoteData } = this.props\n const { filter, expanded } = this.state\n const status = remoteData.status\n const statusControl = (\n
\n \n this.filter = i}\n onKeyPress={this.handleKeyPress} />\n {filter && (\n \n {this.setFilter('')}}\n style={{cursor: 'pointer', zIndex: 10, pointerEvents: 'auto'}}\n >\n \n  \n \n \n )}\n \n \n   Expand by default: \n \n \n
\n )\n return (\n \n
\n \n
\n\n {status && this.renderStatusHeader(status)}\n {statusControl}\n
\n {status && status.pipelines.map(item => (\n \n ))}\n
\n {status && this.renderStatusFooter(status)}\n
)\n }\n}\n\nexport default connect(state => ({\n preferences: state.preferences,\n tenant: state.tenant,\n timezone: state.timezone,\n remoteData: state.status,\n}))(StatusPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchChangeIfNeeded } from '../actions/change'\nimport ChangePanel from '../containers/status/ChangePanel'\nimport { Fetchable } from '../containers/Fetching'\n\n\nclass ChangeStatusPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchChangeIfNeeded(\n this.props.tenant, this.props.match.params.changeId, force))\n .then(() => {this.timer = setTimeout(this.updateData, 5000)})\n // Clear any running timer\n if (this.timer) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n\n componentDidMount () {\n document.title = this.props.match.params.changeId + ' | Zuul Status'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n componentWillUnmount () {\n if (this.timer) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n\n render () {\n const { remoteData } = this.props\n const change = remoteData.change\n return (\n \n \n \n \n {change && change.map((item, idx) => (\n
\n \n
\n ))}\n
)\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.change\n}))(ChangeStatusPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\n\n\nfunction ProjectVariant(props) {\n const { tenant, variant } = props\n const rows = []\n\n if (variant.merge_mode) {\n rows.push({label: 'Merge mode', value: variant.merge_mode})\n }\n\n if (variant.templates.length > 0) {\n const templateList = (\n
    \n {variant.templates.map((item, idx) => (\n
  • {item}
  • ))}\n
\n )\n rows.push({label: 'Templates', value: templateList})\n }\n\n variant.pipelines.forEach(pipeline => {\n // TODO: either adds job link anchor to load the right variant\n // and/or show the job variant config in a modal?\n const jobList = (\n \n {pipeline.queue_name && (\n

Queue: {pipeline.queue_name}

)}\n
    \n {pipeline.jobs.map((item, idx) => (\n
  • \n \n {item[0].name}\n \n
  • \n ))}\n
\n
\n )\n rows.push({label: pipeline.name + ' jobs', value: jobList})\n })\n\n return (\n
\n \n \n {rows.map(item => (\n \n \n \n \n ))}\n \n
{item.label}{item.value}
\n
\n )\n}\n\nProjectVariant.propTypes = {\n tenant: PropTypes.object,\n variant: PropTypes.object.isRequired\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n }\n}\n\nexport default connect(mapStateToProps)(ProjectVariant)\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Tabs,\n Tab,\n} from '@patternfly/react-core'\n\nimport ProjectVariant from './ProjectVariant'\n\n\nfunction Project(props) {\n const [variantIdx, setVariantIdx] = useState(0)\n const { project } = props\n\n function renderVariantTitle (variant) {\n let title = variant.source_context.project === project.name ?\n variant.source_context.branch : variant.source_context.project\n return title\n }\n\n return (\n \n setVariantIdx(tabIndex)}\n isBox>\n {project.configs.map((variant, idx) => (\n \n \n \n ))}\n \n \n )\n}\n\nProject.propTypes = {\n project: PropTypes.object.isRequired,\n}\n\nexport default Project\n","// Copyright 2020 BMW Group\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Button,\n TextInput,\n Dropdown,\n DropdownItem,\n DropdownPosition,\n DropdownToggle,\n Toolbar,\n ToolbarContent,\n ToolbarGroup,\n ToolbarItem,\n ToolbarToggleGroup,\n} from '@patternfly/react-core'\n\n\nfunction JobGraphToolbar(props) {\n const pipelineSet = new Set()\n props.project.configs.forEach((config) => {\n config.pipelines.forEach((pipeline) => {\n pipelineSet.add(pipeline.name)\n })\n })\n const pipelines = Array.from(pipelineSet)\n\n const [isPipelineOpen, setIsPipelineOpen] = useState(false)\n const [currentPipeline, setCurrentPipeline] = useState(props.defaultPipeline || pipelines[0])\n const [currentBranch, setCurrentBranch] = useState(props.defaultBranch || '')\n\n function handlePipelineSelect(event) {\n setCurrentPipeline(event.target.innerText)\n setIsPipelineOpen(false)\n }\n\n function handlePipelineToggle(isOpen) {\n setIsPipelineOpen(isOpen)\n }\n\n function handleBranchChange(newValue) {\n setCurrentBranch(newValue)\n }\n\n function handleInputSend(event) {\n // In case the event comes from a key press, only accept \"Enter\"\n if (event.key && event.key !== 'Enter') {\n return\n }\n\n // Ignore empty values\n if (!currentBranch) {\n return\n }\n\n // Clear the input field\n setCurrentBranch('')\n // Notify the parent component about the filter change\n props.onChange(currentPipeline, currentBranch)\n }\n\n function renderJobGraphToolbar () {\n return <>\n \n \n \n \n\n \n \n Pipeline: {currentPipeline}\n \n }\n isOpen={isPipelineOpen}\n dropdownItems={pipelines.map((pipeline) => (\n {pipeline}\n ))}\n style={{ width: '100%' }}\n menuAppendTo={document.body}\n />\n \n\n \n handleInputSend(event)}\n />\n \n\n \n handleInputSend(event)}\n >\n View Job Graph\n \n \n\n \n \n \n \n \n }\n\n return (\n
\n {renderJobGraphToolbar()}\n
\n )\n}\n\nJobGraphToolbar.propTypes = {\n project: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n defaultBranch: PropTypes.string,\n defaultPipeline: PropTypes.string,\n}\n\nexport default JobGraphToolbar\n","// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState, useEffect} from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport * as d3 from 'd3'\nimport { useHistory } from 'react-router-dom'\n\nimport { makeJobGraphKey, fetchJobGraphIfNeeded } from '../../actions/jobgraph'\nimport { graphviz } from 'd3-graphviz'\n\nfunction makeDot(tenant, pipeline, project, branch, jobGraph) {\n let ret = 'digraph job_graph {\\n'\n ret += ' rankdir=LR;\\n'\n ret += ' node [shape=box];\\n'\n jobGraph.forEach((job) => {\n const searchParams = new URLSearchParams('')\n searchParams.append('pipeline', pipeline)\n searchParams.append('project', project.name)\n searchParams.append('job', job.name)\n searchParams.append('branch', branch)\n // This will appear in the DOM as an \"a href=\" but we will\n // manipulate the DOM later to add an onClick callback to make\n // this an internal link.\n const url = (tenant.linkPrefix +\n '/freeze-job?' + searchParams.toString())\n // Escape ampersands to get it through graphviz and d3; these will\n // appear unescaped in the DOM.\n const escaped_url = url.replace(/&/g, '&')\n ret += ' \"' + job.name + '\" [URL=\"' + escaped_url + '\"];\\n'\n if (job.dependencies.length) {\n job.dependencies.forEach((dep) => {\n let soft = ' [dir=back]'\n if (dep.soft) {\n soft = ' [style=dashed dir=back]'\n }\n ret += ' \"' + dep.name + '\" -> \"' + job.name + '\"' + soft + ';\\n'\n })\n }\n })\n ret += '}\\n'\n return ret\n}\n\nfunction GraphViz(props) {\n const history = useHistory()\n\n useEffect(() => {\n const gv = graphviz('#graphviz')\n .options({\n fit: false,\n zoom: true,\n tweenPaths: false,\n scale: 0.75,\n }).renderDot(props.dot)\n\n // Fix up the initial values of the internal transform data;\n // without this the first time we pan the graph jumps.\n const element = d3.select('.zuul-job-graph > svg')\n const transform = element[0][0].firstElementChild.attributes.transform.value\n const match = transform.match(/translate\\(\\d+,(\\d+)\\).*/)\n if (match && match.length > 0) {\n const val = parseInt(match[1])\n gv._translation.y = val\n gv._originalTransform.y = val\n }\n\n // Disable scroll wheel zooming because it interferes with window\n // scrolling\n gv.zoomSelection().on('wheel.zoom', null)\n\n // Mutate the links to be internal links\n d3.select('.zuul-job-graph').selectAll('.node a').on('click', event => {\n d3.event.preventDefault()\n history.push(event.attributes['xlink:href'])\n })\n }, [props.dot, history])\n\n return (\n
\n )\n}\n\nGraphViz.propTypes = {\n dot: PropTypes.string.isRequired,\n}\n\nfunction JobGraphDisplay(props) {\n const [dot, setDot] = useState()\n const {fetchJobGraphIfNeeded, tenant, project, pipeline, branch} = props\n\n useEffect(() => {\n fetchJobGraphIfNeeded(tenant, project.name, pipeline, branch)\n }, [fetchJobGraphIfNeeded, tenant, project, pipeline, branch])\n\n const tenantJobGraph = props.jobgraph.jobGraphs[tenant.name]\n const jobGraphKey = makeJobGraphKey(props.project.name,\n props.pipeline,\n props.branch)\n const jobGraph = tenantJobGraph ? tenantJobGraph[jobGraphKey] : undefined\n useEffect(() => {\n if (jobGraph) {\n setDot(makeDot(tenant, pipeline, project, branch, jobGraph))\n }\n }, [tenant, pipeline, project, branch, jobGraph])\n return (\n <>\n {dot && }\n \n )\n}\n\nJobGraphDisplay.propTypes = {\n fetchJobGraphIfNeeded: PropTypes.func,\n tenant: PropTypes.object,\n project: PropTypes.object.isRequired,\n pipeline: PropTypes.string.isRequired,\n branch: PropTypes.string.isRequired,\n jobgraph: PropTypes.object,\n dispatch: PropTypes.func,\n state: PropTypes.object,\n}\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n jobgraph: state.jobgraph,\n state: state,\n }\n}\n\nconst mapDispatchToProps = { fetchJobGraphIfNeeded }\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JobGraphDisplay)\n","// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { useHistory, useLocation } from 'react-router-dom'\n\nimport JobGraphToolbar from './JobGraphToolbar'\nimport JobGraphDisplay from './JobGraphDisplay'\n\nfunction JobGraph(props) {\n const [currentPipeline, setCurrentPipeline] = useState()\n const [currentBranch, setCurrentBranch] = useState()\n const history = useHistory()\n const location = useLocation()\n\n if (!currentBranch) {\n const urlParams = new URLSearchParams(location.search)\n const branch = urlParams.get('branch')\n const pipeline = urlParams.get('pipeline')\n if (pipeline && branch) {\n setCurrentPipeline(pipeline)\n setCurrentBranch(branch)\n }\n }\n\n function onChange(pipeline, branch) {\n setCurrentPipeline(pipeline)\n setCurrentBranch(branch)\n\n const searchParams = new URLSearchParams('')\n searchParams.append('branch', branch)\n searchParams.append('pipeline', pipeline)\n history.push({\n pathname: location.pathname,\n search: searchParams.toString(),\n })\n }\n\n return (\n <>\n \n {currentPipeline && currentBranch &&\n }\n \n )\n}\n\nJobGraph.propTypes = {\n project: PropTypes.object.isRequired,\n tenant: PropTypes.object,\n dispatch: PropTypes.func,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n}))(JobGraph)\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useCallback } from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {\n PageSection,\n PageSectionVariants,\n Text,\n TextContent,\n} from '@patternfly/react-core'\nimport Project from '../containers/project/Project'\nimport JobGraph from '../containers/jobgraph/JobGraph'\nimport { fetchProjectIfNeeded } from '../actions/project'\nimport { Fetchable } from '../containers/Fetching'\n\n\nfunction ProjectPage(props) {\n const { tenant, fetchProjectIfNeeded, remoteData } = props\n const { projectName } = props.match.params\n const tenantProjects = remoteData.projects[tenant.name]\n\n const updateData = useCallback((force) => {\n if (tenant.name) {\n fetchProjectIfNeeded(tenant, projectName, force)\n }\n }, [tenant, projectName, fetchProjectIfNeeded])\n\n useEffect(() => {\n document.title = 'Zuul Project | ' + projectName\n updateData()\n }, [tenant, projectName, updateData])\n\n return (\n <>\n \n \n Project {projectName}\n \n \n {tenantProjects && tenantProjects[projectName] &&\n <>\n \n \n \n }\n \n \n )\n}\n\nProjectPage.propTypes = {\n match: PropTypes.object.isRequired,\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n fetchProjectIfNeeded: PropTypes.func,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n remoteData: state.project,\n }\n}\n\nconst mapDispatchToProps = {\n fetchProjectIfNeeded,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProjectPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport { Table } from 'patternfly-react'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchProjectsIfNeeded } from '../actions/projects'\nimport { Fetchable, Fetching } from '../containers/Fetching'\n\n\nclass ProjectsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchProjectsIfNeeded(this.props.tenant, force))\n }\n\n componentDidMount () {\n document.title = 'Zuul Projects'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render () {\n const { remoteData } = this.props\n const projects = remoteData.projects[this.props.tenant.name]\n\n // TODO (felix): Can we somehow differentiate between \"no projects yet\" (due\n // to fetching) and \"no projects at all\", so we could show an empty state\n // in the latter case. The same applies for other pages like labels, nodes,\n // buildsets, ... as well.\n if (!projects) {\n return \n }\n\n const headerFormat = value => {value}\n const cellFormat = (value) => (\n {value})\n const cellProjectFormat = (value, row) => (\n \n \n {value}\n \n )\n const cellBuildFormat = (value) => (\n \n {\n let formatter = cellFormat\n let prop = column\n if (column === 'name') {\n formatter = cellProjectFormat\n }\n if (column === 'connection') {\n prop = 'connection_name'\n }\n if (column === 'last builds') {\n prop = 'name'\n formatter = cellBuildFormat\n }\n columns.push({\n header: {label: column,\n formatters: [headerFormat]},\n property: prop,\n cell: {formatters: [formatter]}\n })\n })\n return (\n \n \n \n \n \n \n \n \n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.projects,\n}))(ProjectsPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n\nclass SourceContext extends React.Component {\n static propTypes = {\n context: PropTypes.object.isRequired,\n showBranch: PropTypes.bool\n }\n\n render() {\n const { context, showBranch } = this.props\n return (\n \n {context.project}\n {showBranch && context.branch !== 'master' &&\n ' (' + context.branch + ')'}\n : {context.path}\n \n )\n }\n}\n\nexport default SourceContext\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n List,\n ListItem,\n TreeView\n} from '@patternfly/react-core'\n\nimport {\n ServerIcon,\n TagIcon\n} from '@patternfly/react-icons'\n\nclass Nodeset extends React.Component {\n static propTypes = {\n nodeset: PropTypes.object.isRequired\n }\n\n constructor(props) {\n super(props)\n\n this.state = { activeItems: {} }\n\n // eslint-disable-next-line no-unused-vars\n this.onSelect = (event, treeViewItem) => {\n this.setState({\n /* NOTE(ianw) 2021-08-13 : override this\n * from standard [treeViewItem] as we don't want\n * anything selectable.\n */\n activeItems: {}\n })\n }\n }\n\n render () {\n const { nodeset } = this.props\n\n const { activeItems } = this.state\n\n const nodes = []\n nodeset.nodes.forEach((node) => {\n nodes.push(\n {\n name: (\n \n }>{node.name}\n }>{node.label}\n ),\n id: node.name + node.label,\n }\n )\n })\n const groups = []\n nodeset.groups.forEach((group) => {\n let group_children = []\n group.nodes.forEach((child_node) => {\n group_children.push(\n {\n name: (\n \n }>{child_node}\n \n ),\n id: child_node\n }\n )})\n groups.push(\n {\n name: group.name,\n id: group.name,\n children: group_children\n }\n )\n })\n const options = [\n {\n name: 'Nodeset ' + nodeset.name,\n id: 'nodes',\n children: nodes\n },\n {\n name: 'Node Groups',\n id: 'groups',\n children: groups\n }\n ]\n\n return (\n \n \n \n )\n }\n}\n\nexport default Nodeset\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n\nclass Role extends React.Component {\n static propTypes = {\n role: PropTypes.object.isRequired\n }\n\n render() {\n const { role } = this.props\n return (\n \n {role.target_name} ({role.project_canonical_name})\n \n )\n }\n}\n\nexport default Role\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n\nclass JobProject extends React.Component {\n static propTypes = {\n project: PropTypes.object.isRequired\n }\n\n render() {\n const { project } = this.props\n return (\n \n {project.project_name}\n {project.override_branch && (\n ' ( override-branch: ' + project.override_branch + ')')}\n {project.override_checkout && (\n ' ( override-checkout: ' + project.override_checkout+ ')')}\n \n )\n }\n}\n\nexport default JobProject\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n/*\n * NOTE(ianw) 2021-08-16\n * Some thoughts for future work:\n *\n * - Most descriptions are one line, but some a very long.\n * - Might be cool to have a fixed height and show a preview of the description\n * that fades out, but can the be clicked to be read fully.\n * - Perhaps Zuul could format this for us, as it looks like raw RST.\n * I think that would have to be a python/sphinx thing, can't practically\n * do it client side.\n */\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardExpandableContent,\n CardBody\n} from '@patternfly/react-core'\n\nclass JobDescriptionCard extends React.Component {\n static propTypes = {\n description: PropTypes.string\n }\n\n constructor(props) {\n super(props)\n\n this.state = {\n isExpanded: true\n }\n\n this.onExpand = () => {\n this.setState({\n isExpanded: !this.state.isExpanded\n })\n }\n }\n\n render() {\n if (!this.props.description) {\n return null\n }\n\n return (\n \n \n \n Job description\n \n \n \n {this.props.description}\n \n \n \n \n )\n }\n\n}\n\nexport default JobDescriptionCard\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport ReactJson from 'react-json-view'\nimport {\n DescriptionList,\n DescriptionListTerm,\n DescriptionListGroup,\n DescriptionListDescription,\n List,\n ListItem,\n ListVariant,\n} from '@patternfly/react-core'\nimport {\n AnsibleTowerIcon,\n BanIcon,\n CatalogIcon,\n ClipboardCheckIcon,\n ClusterIcon,\n CodeBranchIcon,\n CodeIcon,\n ConnectedIcon,\n DisconnectedIcon,\n ExternalLinkAltIcon,\n FlagIcon,\n HistoryIcon,\n InfrastructureIcon,\n LockIcon,\n LockedIcon,\n OutlinedClockIcon,\n PackageIcon,\n RedoIcon,\n WrenchIcon\n} from '@patternfly/react-icons'\n\nimport SourceContext from '../SourceContext'\nimport Nodeset from './Nodeset'\nimport Role from './Role'\nimport JobProject from './JobProject'\nimport JobDescriptionCard from './JobDescriptionCard'\n\nclass JobVariant extends React.Component {\n static propTypes = {\n parent: PropTypes.object,\n tenant: PropTypes.object,\n variant: PropTypes.object.isRequired\n }\n\n renderStatus (variant) {\n const status = [{\n icon: variant.voting ? : ,\n name: variant.voting ? 'Voting' : 'Non-voting'\n }]\n if (variant.abstract) {\n status.push({\n icon: ,\n name: 'Abstract'\n })\n }\n if (variant.final) {\n status.push({\n icon: ,\n name: 'Final'\n })\n }\n if (variant.post_review) {\n status.push({\n icon: ,\n name: 'Post review'\n })\n }\n if (variant.protected) {\n status.push({\n icon: ,\n name: 'Protected'\n })\n }\n\n return (\n \n {status.map((item, idx) => (\n {item.name}\n ))}\n \n )\n }\n\n render () {\n const { tenant, variant } = this.props\n const rows = []\n\n const jobInfos = [\n 'source_context', 'builds', 'status',\n 'parent', 'attempts', 'timeout', 'semaphores',\n 'nodeset', 'nodeset_alternatives', 'variables',\n 'override_checkout',\n ]\n jobInfos.forEach(key => {\n let label = key\n let nice_label = key\n let value = variant[key]\n\n if (label === 'source_context' && value) {\n value = (\n \n )\n nice_label = ( Defined at)\n }\n if (label === 'builds') {\n value = (\n Job flags)\n }\n\n if (!value) {\n return\n }\n\n if (label === 'attempts') {\n nice_label = ( Retry attempts)\n }\n\n if (label === 'timeout') {\n value = ({value} seconds)\n nice_label = ( Timeout)\n }\n\n if (label === 'semaphores') {\n if (value.length === 0) {\n value = (none)\n } else {\n value = (\n \n \n \n )\n }\n nice_label = ( Semaphores)\n }\n\n if (label === 'nodeset') {\n value = (\n \n )\n nice_label = ( Required nodes)\n }\n if (label === 'nodeset_alternatives') {\n value = value.map((alt, idx) => {\n return (<>\n {(idx > 0 ? or:<>)}\n \n )\n })\n nice_label = ( Required nodes)\n }\n if (label === 'parent') {\n value = (\n \n  {value}\n \n )\n nice_label = ( Parent)\n }\n if (label === 'variables') {\n value = (\n \n \n \n )\n nice_label = ( Job variables)\n }\n\n if (label === 'description') {\n value = (\n
\n {value}\n
\n )\n nice_label = ( Description)\n }\n\n rows.push({label: nice_label, value: value})\n\n })\n const jobInfosList = [\n 'required_projects', 'dependencies', 'files', 'irrelevant_files', 'roles'\n ]\n jobInfosList.forEach(key => {\n let label = key\n let nice_label = key\n let values = variant[key]\n\n if (values.length === 0) {\n return\n }\n const items = (\n \n {values.map((value, idx) => {\n let item\n if (label === 'required_projects') {\n nice_label = 'Required Projects'\n item = \n } else if (label === 'roles') {\n nice_label = ( Uses roles from)\n item = \n } else if (label === 'dependencies') {\n nice_label = ( Job dependencies)\n if (value['soft']) {\n item = value['name'] + ' (soft)'\n } else {\n item = value['name']\n }\n } else if (label === 'irrelevant_files') {\n nice_label = ( Irrelevant files matchers)\n item = value\n } else if (label === 'files') {\n nice_label = (Files matchers)\n item = value\n } else {\n item = value\n }\n return (\n \n {item}\n \n )\n })}\n \n )\n rows.push({label: nice_label, value: items})\n })\n return (\n \n \n \n {rows.map((item, idx) => (\n \n \n {item.label}\n \n \n {item.value}\n \n \n ))}\n \n \n )\n }\n}\n\nexport default connect(state => ({tenant: state.tenant}))(JobVariant)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Tab,\n Tabs,\n TabTitleText,\n Title\n} from '@patternfly/react-core'\n\nimport JobVariant from './JobVariant'\n\nclass Job extends React.Component {\n static propTypes = {\n job: PropTypes.array.isRequired,\n }\n\n state = {\n activeTabeKey: 0\n }\n\n renderVariantTitle (variant) {\n let title = variant.variant_description\n if (!title) {\n title = ''\n /* NOTE(ianw) 2021-08-13 : it seems like if this is only defined\n for one branch we don't get the branches. This might be a\n bug. In this case, use the source context branch (i.e. where\n it's defined */\n if (variant.branches.length === 0) {\n title = variant.source_context.branch\n } else {\n variant.branches.forEach((item) => {\n if (title) {\n title += ', '\n }\n title += item\n })\n }\n }\n return title\n }\n\n handleTabClick ( tabIndex ) {\n this.setState({\n activeTabKey: tabIndex\n })\n }\n\n render () {\n const { job } = this.props\n const { activeTabKey } = this.state\n\n return (\n \n \n Details for job <span style={{color: 'var(--pf-global--primary-color--100)'}}>{job[0].name}</span>\n \n this.handleTabClick(tabIndex)}\n isBox>\n {job.map((variant, idx) => (\n {this.renderVariantTitle(variant)}}>\n \n \n ))}\n \n \n )\n }\n}\n\nexport default Job\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport Job from '../containers/job/Job'\nimport { fetchJobIfNeeded } from '../actions/job'\n\n\nclass JobPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchJobIfNeeded(\n this.props.tenant, this.props.match.params.jobName, force))\n }\n\n componentDidMount () {\n document.title = 'Zuul Job | ' + this.props.match.params.jobName\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name ||\n this.props.match.params.jobName !== prevProps.match.params.jobName) {\n this.updateData()\n }\n }\n\n render () {\n const { remoteData } = this.props\n const tenantJobs = remoteData.jobs[this.props.tenant.name]\n const jobName = this.props.match.params.jobName\n return (\n \n {tenantJobs && tenantJobs[jobName] && }\n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.job,\n}))(JobPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport {\n Checkbox,\n Badge,\n Form,\n FormGroup,\n FormControl,\n Icon,\n TreeView\n} from 'patternfly-react'\n\n\nclass JobsList extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n jobs: PropTypes.array,\n }\n\n state = {\n filter: null,\n flatten: false,\n }\n\n handleKeyPress = (e) => {\n if (e.charCode === 13) {\n this.setState({filter: e.target.value})\n e.preventDefault()\n e.target.blur()\n }\n }\n\n render () {\n const { jobs } = this.props\n const { filter, flatten } = this.state\n\n const linkPrefix = this.props.tenant.linkPrefix + '/job/'\n\n // job index map\n const jobMap = {}\n // nodes contains the tree data\n const nodes = []\n // visited contains individual node\n const visited = {}\n // createNode returns the actual node needed by the tree view component\n const createNode = (job, extra) => ({\n text: (\n \n {job.name}\n {extra && ( ({extra}))}\n {job.description && (\n {job.description}\n )}\n {job.tags && job.tags.map((tag, idx) => (\n \n {tag}\n ))}\n ),\n icon: 'fa fa-cube',\n state: {\n expanded: true,\n },\n })\n // getNode returns the tree node and visit each parents\n const getNode = function (job, filtered) {\n if (!visited[job.name]) {\n // Collect parents\n let parents = []\n if (job.variants) {\n for (let jobVariant of job.variants) {\n if (jobVariant.parent &&\n parents.indexOf(jobVariant.parent) === -1) {\n parents.push(jobVariant.parent)\n }\n }\n }\n visited[job.name] = createNode(job, null)\n visited[job.name].parents = parents\n visited[job.name].filtered = filtered\n // Visit parent recursively\n if (!flatten) {\n for (let parent of parents) {\n if (jobMap[parent]) {\n getNode(jobMap[parent], filtered)\n }\n }\n }\n }\n return visited[job.name]\n }\n // index job list\n for (let job of jobs) {\n jobMap[job.name] = job\n }\n // filter job\n let filtered = false\n if (filter) {\n filtered = true\n let filters = filter.replace(/ +/g, ',').split(',')\n for (let job of jobs) {\n filters.forEach(jobFilter => {\n if (jobFilter && (\n (job.name.indexOf(jobFilter) !== -1) ||\n (job.description && job.description.indexOf(jobFilter) !== -1))) {\n getNode(job, !filtered)\n }\n })\n }\n }\n // process job list\n for (let job of jobs) {\n const jobNode = getNode(job, filtered)\n if (!jobNode.filtered) {\n let attached = false\n if (!flatten) {\n // add tree node to each parent and expand the parent\n for (let parent of jobNode.parents) {\n const parentNode = visited[parent]\n if (!parentNode) {\n console.log(\n 'Job ', job.name, ' parent ', parent, ' does not exist!')\n continue\n }\n if (!parentNode.nodes) {\n parentNode.nodes = []\n }\n if (attached) {\n // We need to create a duplicate node to satisfy TreeView constrains for multi parent\n parentNode.nodes.push(createNode(job, 'branched'))\n } else {\n parentNode.nodes.push(jobNode)\n }\n attached = true\n }\n }\n // else add node at the tree root\n if (!attached || jobNode.parents.length === 0) {\n nodes.push(jobNode)\n }\n }\n }\n return (\n
\n
\n \n this.filter = i}\n onKeyPress={this.handleKeyPress} />\n {filter && (\n \n {this.setState({filter: ''})\n this.filter.value = ''}}\n style={{cursor: 'pointer', zIndex: 10, pointerEvents: 'auto'}}\n >\n \n  \n \n \n )}\n \n \n   Flatten list  \n this.setState({flatten: e.target.checked})} />\n \n
\n \n
\n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n}))(JobsList)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchJobsIfNeeded } from '../actions/jobs'\nimport { Fetchable } from '../containers/Fetching'\nimport Jobs from '../containers/jobs/Jobs'\n\n\nclass JobsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchJobsIfNeeded(this.props.tenant, force))\n }\n\n componentDidMount () {\n document.title = 'Zuul Jobs'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render () {\n const { remoteData } = this.props\n\n const jobs = remoteData.jobs[this.props.tenant.name]\n return (\n \n \n \n \n {jobs && jobs.length > 0 &&\n }\n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.jobs,\n}))(JobsPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Table } from 'patternfly-react'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchLabelsIfNeeded } from '../actions/labels'\nimport { Fetchable, Fetching } from '../containers/Fetching'\n\n\nclass LabelsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData (force) {\n this.props.dispatch(fetchLabelsIfNeeded(this.props.tenant, force))\n }\n\n componentDidMount () {\n document.title = 'Zuul Labels'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render () {\n const { remoteData } = this.props\n const labels = remoteData.labels[this.props.tenant.name]\n\n if (!labels) {\n return \n }\n\n const headerFormat = value => {value}\n const cellFormat = value => {value}\n const columns = []\n const myColumns = ['name']\n myColumns.forEach(column => {\n let formatter = cellFormat\n let prop = column\n columns.push({\n header: {label: column, formatters: [headerFormat]},\n property: prop,\n cell: {formatters: [formatter]}\n })\n })\n return (\n \n \n \n \n \n \n \n \n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.labels,\n}))(LabelsPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Table } from 'patternfly-react'\nimport * as moment from 'moment'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchNodesIfNeeded } from '../actions/nodes'\nimport { Fetchable } from '../containers/Fetching'\n\n\nclass NodesPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchNodesIfNeeded(this.props.tenant, force))\n }\n\n componentDidMount () {\n document.title = 'Zuul Nodes'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render () {\n const { remoteData } = this.props\n const nodes = remoteData.nodes\n\n const headerFormat = value => {value}\n const cellFormat = value => {value}\n const cellLabelsFormat = value => {value.join(',')}\n const cellPreFormat = value => (\n \n {value}\n )\n const cellAgeFormat = value => (\n \n {moment.unix(value).fromNow()}\n )\n\n const columns = []\n const myColumns = [\n 'id', 'labels', 'connection', 'server', 'provider', 'state',\n 'age', 'comment'\n ]\n myColumns.forEach(column => {\n let formatter = cellFormat\n let prop = column\n if (column === 'labels') {\n prop = 'type'\n formatter = cellLabelsFormat\n } else if (column === 'connection') {\n prop = 'connection_type'\n } else if (column === 'server') {\n prop = 'external_id'\n formatter = cellPreFormat\n } else if (column === 'age') {\n prop = 'state_time'\n formatter = cellAgeFormat\n }\n columns.push({\n header: {label: column, formatters: [headerFormat]},\n property: prop,\n cell: {formatters: [formatter]}\n })\n })\n return (\n \n \n \n \n \n \n \n \n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.nodes,\n}))(NodesPage)\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport {\n DescriptionList,\n DescriptionListTerm,\n DescriptionListGroup,\n DescriptionListDescription,\n Spinner,\n} from '@patternfly/react-core'\n\nfunction Semaphore({ semaphore, tenant, fetching }) {\n if (fetching && !semaphore) {\n return (\n
\n \n
\n )\n }\n if (!semaphore) {\n return (\n
\n No semaphore found\n
\n )\n }\n const rows = []\n rows.push({label: 'Name', value: semaphore.name})\n rows.push({label: 'Current Holders', value: semaphore.holders.count})\n rows.push({label: 'Max', value: semaphore.max})\n rows.push({label: 'Global', value: semaphore.global ? 'Yes' : 'No'})\n if (semaphore.global) {\n rows.push({label: 'Holders in Other Tenants',\n value: semaphore.holders.other_tenants})\n }\n semaphore.holders.this_tenant.forEach(holder => {\n rows.push({label: 'Held By',\n value: \n {holder.job_name}\n })\n })\n return (\n \n {rows.map((item, idx) => (\n \n \n {item.label}\n \n \n {item.value}\n \n \n ))}\n \n )\n}\n\nSemaphore.propTypes = {\n semaphore: PropTypes.object.isRequired,\n fetching: PropTypes.bool.isRequired,\n tenant: PropTypes.object.isRequired,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n }\n}\n\nexport default connect(mapStateToProps)(Semaphore)\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\n\nimport {\n Title,\n} from '@patternfly/react-core'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchSemaphoresIfNeeded } from '../actions/semaphores'\nimport Semaphore from '../containers/semaphore/Semaphore'\n\nfunction SemaphorePage({ match, semaphores, tenant, fetchSemaphoresIfNeeded, isFetching }) {\n\n const semaphoreName = match.params.semaphoreName\n\n useEffect(() => {\n document.title = `Zuul Semaphore | ${semaphoreName}`\n fetchSemaphoresIfNeeded(tenant, true)\n }, [fetchSemaphoresIfNeeded, tenant, semaphoreName])\n\n const semaphore = semaphores[tenant.name] ? semaphores[tenant.name].find(\n e => e.name === semaphoreName) : undefined\n\n return (\n \n \n Details for Semaphore <span style={{color: 'var(--pf-global--primary-color--100)'}}>{semaphoreName}</span>\n \n\n \n \n )\n}\n\nSemaphorePage.propTypes = {\n match: PropTypes.object.isRequired,\n semaphores: PropTypes.object.isRequired,\n tenant: PropTypes.object.isRequired,\n isFetching: PropTypes.bool.isRequired,\n fetchSemaphoresIfNeeded: PropTypes.func.isRequired,\n}\nconst mapDispatchToProps = { fetchSemaphoresIfNeeded }\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n semaphores: state.semaphores.semaphores,\n isFetching: state.semaphores.isFetching,\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SemaphorePage)\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n Spinner,\n Title,\n Label,\n} from '@patternfly/react-core'\nimport {\n ResourcesFullIcon,\n TachometerAltIcon,\n LockIcon,\n TenantIcon,\n FingerprintIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\nimport { Link } from 'react-router-dom'\n\nimport { IconProperty } from '../../Misc'\n\nfunction SemaphoreTable(props) {\n const { semaphores, fetching, tenant } = props\n const columns = [\n {\n title: } value=\"Name\" />,\n dataLabel: 'Name',\n },\n {\n title: } value=\"Current\" />,\n dataLabel: 'Current',\n },\n {\n title: } value=\"Max\" />,\n dataLabel: 'Max',\n },\n {\n title: } value=\"Global\" />,\n dataLabel: 'Global',\n },\n ]\n\n function createSemaphoreRow(semaphore) {\n\n return {\n cells: [\n {\n title: (\n {semaphore.name}\n ),\n },\n {\n title: semaphore.holders.count,\n },\n {\n title: semaphore.max,\n },\n {\n title: semaphore.global ? (\n \n Global\n \n ) : ''\n },\n ]\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
\n \n
\n ),\n },\n ],\n },\n ]\n return rows\n }\n\n const haveSemaphores = semaphores && semaphores.length > 0\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n columns[0].dataLabel = ''\n } else {\n if (haveSemaphores) {\n rows = semaphores.map((semaphore) => createSemaphoreRow(semaphore))\n }\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any semaphores but are also not\n fetching */}\n {!fetching && !haveSemaphores && (\n \n \n No semaphores found\n \n Nothing to display.\n \n \n )}\n \n )\n}\n\nSemaphoreTable.propTypes = {\n semaphores: PropTypes.array,\n fetching: PropTypes.bool.isRequired,\n tenant: PropTypes.object,\n user: PropTypes.object,\n dispatch: PropTypes.func,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n user: state.user,\n}))(SemaphoreTable)\n","// Copyright 2021 BMW Group\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n PageSection,\n PageSectionVariants,\n} from '@patternfly/react-core'\n\nimport { fetchSemaphoresIfNeeded } from '../actions/semaphores'\nimport SemaphoreTable from '../containers/semaphore/SemaphoreTable'\n\nfunction SemaphoresPage({ tenant, semaphores, isFetching, fetchSemaphoresIfNeeded }) {\n useEffect(() => {\n document.title = 'Zuul Semaphores'\n fetchSemaphoresIfNeeded(tenant, true)\n }, [fetchSemaphoresIfNeeded, tenant])\n\n return (\n <>\n \n \n \n \n )\n}\n\nSemaphoresPage.propTypes = {\n tenant: PropTypes.object.isRequired,\n semaphores: PropTypes.object.isRequired,\n isFetching: PropTypes.bool.isRequired,\n fetchSemaphoresIfNeeded: PropTypes.func.isRequired,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n semaphores: state.semaphores.semaphores,\n isFetching: state.semaphores.isFetching,\n }\n}\n\nconst mapDispatchToProps = { fetchSemaphoresIfNeeded }\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SemaphoresPage)\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n OutlinedQuestionCircleIcon,\n HashtagIcon,\n BuildIcon,\n CodeBranchIcon,\n CubeIcon,\n OutlinedClockIcon,\n LockIcon,\n TrashIcon,\n FingerprintIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\nimport { Link } from 'react-router-dom'\nimport * as moment from 'moment'\n\nimport { autohold_delete } from '../../api'\nimport { addNotification } from '../../actions/notifications'\nimport { addAutoholdError } from '../../actions/adminActions'\nimport { fetchAutoholds } from '../../actions/autoholds'\n\nimport { IconProperty } from '../../Misc'\n\nfunction AutoholdTable(props) {\n const { autoholds, fetching, tenant, user, dispatch } = props\n const columns = [\n {\n title: } value=\"ID\" />,\n dataLabel: 'Request ID',\n },\n {\n title: } value=\"Project\" />,\n dataLabel: 'Project',\n },\n {\n title: } value=\"Job\" />,\n dataLabel: 'Job',\n },\n {\n title: } value=\"Ref Filter\" />,\n dataLabel: 'Ref Filter',\n },\n {\n title: } value=\"Triggers\" />,\n dataLabel: 'Triggers',\n },\n {\n title: } value=\"Reason\" />,\n dataLabel: 'Reason',\n },\n {\n title: } value=\"Hold for\" />,\n dataLabel: 'Hold for',\n },\n {\n title: '',\n dataLabel: 'Delete',\n }\n ]\n\n function handleAutoholdDelete(requestId) {\n autohold_delete(tenant.apiPrefix, requestId)\n .then(() => {\n dispatch(addNotification(\n {\n text: 'Autohold request deleted successfully.',\n type: 'success',\n status: '',\n url: '',\n }))\n dispatch(fetchAutoholds(tenant))\n })\n .catch(error => {\n dispatch(addAutoholdError(error))\n })\n }\n\n function renderAutoholdDeleteButton(requestId) {\n return (\n {\n event.preventDefault()\n handleAutoholdDelete(requestId)\n }} />\n )\n }\n\n function createAutoholdRow(autohold) {\n const count = autohold.current_count + '/' + autohold.max_count\n const node_expiration = (autohold.node_expiration === 0) ? 'Indefinitely' : moment.duration(autohold.node_expiration, 'seconds').humanize()\n const delete_button = (user.isAdmin && user.scope.indexOf(tenant.name) !== -1) ? renderAutoholdDeleteButton(autohold.id) : ''\n\n return {\n cells: [\n {\n title: (\n {autohold.id}\n ),\n },\n {\n title: autohold.project,\n },\n {\n title: autohold.job,\n },\n {\n title: autohold.ref_filter,\n },\n {\n title: count\n },\n {\n title: autohold.reason,\n },\n {\n title: node_expiration,\n },\n {\n title: delete_button\n },\n ]\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
\n \n
\n ),\n },\n ],\n },\n ]\n return rows\n }\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n columns[0].dataLabel = ''\n } else {\n rows = autoholds.map((autohold) => createAutoholdRow(autohold))\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any autoholds but are also not\n fetching */}\n {!fetching && autoholds.length === 0 && (\n \n \n No autohold requests found\n \n Nothing to display.\n \n \n )}\n \n )\n}\n\nAutoholdTable.propTypes = {\n autoholds: PropTypes.array.isRequired,\n fetching: PropTypes.bool.isRequired,\n tenant: PropTypes.object,\n user: PropTypes.object,\n dispatch: PropTypes.func,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n user: state.user,\n}))(AutoholdTable)\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect, useDispatch } from 'react-redux'\n\nimport {\n Button,\n Modal,\n ModalVariant,\n Form,\n FormGroup,\n TextInput\n} from '@patternfly/react-core'\n\nimport { autohold } from '../../api'\nimport { addAutoholdError } from '../../actions/adminActions'\nimport { addNotification } from '../../actions/notifications'\nimport { fetchAutoholds } from '../../actions/autoholds'\n\nconst AutoholdModal = props => {\n\n const dispatch = useDispatch()\n const { tenant, user, showAutoholdModal, setShowAutoholdModal } = props\n\n const [change, setChange] = useState('')\n const [changeRef, setChangeRef] = useState('')\n const [project, setProject] = useState('some project')\n const [job_name, setJob_name] = useState('some job')\n const [reason, setReason] = useState('-')\n const [count, setCount] = useState(1)\n const [nodeHoldExpiration, setNodeHoldExpiration] = useState(86400)\n\n // Override defaults if optional parameters were passed\n useEffect(() => {\n if (props.change) { setChange(props.change) }\n if (props.changeRef) { setChangeRef(props.changeRef) }\n if (props.project) { setProject(props.project) }\n if (props.jobName) { setJob_name(props.jobName) }\n if (props.reason) {\n setReason(props.reason)\n } else {\n setReason(\n user.data\n ? 'Requested from the web UI by ' + user.data.profile.preferred_username\n : '-'\n )\n }\n }, [props.change, props.changeRef, props.project, props.jobName, props.reason, user.data])\n\n function handleConfirm() {\n let ah_change = change === '' ? null : change\n let ah_ref = changeRef === '' ? null : changeRef\n\n autohold(tenant.apiPrefix, project, job_name, ah_change, ah_ref, reason, parseInt(count), parseInt(nodeHoldExpiration))\n .then(() => {\n /* TODO it looks like there is a delay in the registering of the autohold request\n by the backend, meaning we sometimes do not get the newly created request after\n the dispatch. A solution could be to make the autoholds page auto-refreshing\n like the status page.*/\n dispatch(fetchAutoholds(tenant))\n dispatch(addNotification(\n {\n text: 'Autohold request set successfully.',\n type: 'success',\n status: '',\n url: '',\n }))\n })\n .catch(error => {\n dispatch(addAutoholdError(error))\n })\n setShowAutoholdModal(false)\n }\n\n return (\n { setShowAutoholdModal(false) }}\n actions={[\n handleConfirm()}>Create,\n { setShowAutoholdModal(false) }}>Cancel\n ]}>\n
\n \n { setProject(value) }} />\n \n \n { setJob_name(value) }} />\n \n \n { setChange(value) }} />\n \n \n { setChangeRef(value) }} />\n \n \n { setReason(value) }} />\n \n \n { setCount(value) }} />\n \n \n { setNodeHoldExpiration(value) }} />\n \n \n \n )\n}\n\nAutoholdModal.propTypes = {\n tenant: PropTypes.object,\n user: PropTypes.object,\n change: PropTypes.string,\n changeRef: PropTypes.string,\n project: PropTypes.string,\n jobName: PropTypes.string,\n reason: PropTypes.string,\n showAutoholdModal: PropTypes.bool,\n setShowAutoholdModal: PropTypes.func,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n user: state.user,\n}))(AutoholdModal)\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Flex, FlexItem, PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchAutoholdsIfNeeded } from '../actions/autoholds'\nimport AutoholdTable from '../containers/autohold/AutoholdTable'\n\nimport {\n AddCircleOIcon,\n} from '@patternfly/react-icons'\nimport AutoholdModal from '../containers/autohold/autoholdModal'\nimport { IconProperty } from '../Misc'\n\n\nclass AutoholdsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n user: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n constructor() {\n super()\n\n this.state = {\n showAutoholdModal: false,\n }\n }\n\n setShowAutoholdModal = (value) => {\n this.setState(() => ({ showAutoholdModal: value }))\n }\n\n renderAutoholdButton() {\n const value = ( {\n event.preventDefault()\n this.setShowAutoholdModal(true)\n }}\n >\n Create Request\n )\n return (\n }\n value={value}\n />\n\n )\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchAutoholdsIfNeeded(this.props.tenant, force))\n }\n\n componentDidMount() {\n document.title = 'Zuul Autoholds'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render() {\n const { tenant, user, remoteData } = this.props\n const autoholds = remoteData.autoholds\n const { showAutoholdModal } = this.state\n\n return (\n <>\n {(user.isAdmin && user.scope.indexOf(tenant.name) !== -1) && (\n \n \n \n {this.renderAutoholdButton()}\n \n \n \n )}\n \n \n \n {}\n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.autoholds,\n user: state.user,\n}))(AutoholdsPage)\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\n\nimport {\n Button,\n EmptyState,\n EmptyStateIcon,\n EmptyStatePrimary,\n EmptyStateVariant,\n Title,\n} from '@patternfly/react-core'\n\nfunction EmptyPage(props) {\n const { title, icon, linkTarget, linkText } = props\n\n return (\n \n \n \n {title}\n \n \n \n \n \n \n \n )\n}\n\nEmptyPage.propTypes = {\n title: PropTypes.string.isRequired,\n icon: PropTypes.func.isRequired,\n linkTarget: PropTypes.string.isRequired,\n linkText: PropTypes.string.isRequired,\n}\n\nexport { EmptyPage }\n","// Copyright 2021 Red Hat\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport {\n DataList,\n DataListCell,\n DataListItem,\n DataListItemRow,\n DataListItemCells,\n} from '@patternfly/react-core'\n\nclass HeldBuildList extends React.Component {\n static propTypes = {\n nodes: PropTypes.array,\n tenant: PropTypes.object,\n }\n\n constructor() {\n super()\n this.state = {\n selectedBuildId: null,\n }\n }\n\n handleSelectDataListItem = (buildId) => {\n this.setState({\n selectedBuildId: buildId,\n })\n }\n\n /* TODO find a way to add some more useful info than just the build's UUID,\n like a timestamp and a change number */\n render() {\n const { nodes, tenant } = this.props\n const { selectedBuildId } = this.state\n return (\n \n {nodes.map((node) => (\n \n \n \n \n {node.build}\n ,\n ]}\n />\n \n \n \n ))}\n \n )\n }\n}\n\nexport default connect((state) => ({ tenant: state.tenant }))(HeldBuildList)\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {\n EmptyState,\n EmptyStateIcon,\n EmptyStateVariant,\n PageSection,\n PageSectionVariants,\n Title,\n Flex,\n FlexItem,\n List,\n ListItem,\n} from '@patternfly/react-core'\nimport {\n LockIcon,\n BuildIcon,\n CubeIcon,\n CodeIcon,\n HashtagIcon,\n OutlinedClockIcon,\n OutlinedCommentDotsIcon,\n TrashIcon,\n} from '@patternfly/react-icons'\nimport { IconProperty } from '../Misc'\n\nimport { Link } from 'react-router-dom'\nimport * as moment from 'moment'\n\nimport { fetchAutohold } from '../actions/autoholds'\nimport { EmptyPage } from '../containers/Errors'\nimport { Fetching } from '../containers/Fetching'\nimport HeldBuildList from '../containers/autohold/HeldBuildList'\n\n\n// This is hard-coded in zuul/executor/server.py#3035\nconst EXPIRED_HOLD_REQUEST_TTL = 24 * 60 * 60\n\n\nclass AutoholdPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n tenant: PropTypes.object.isRequired,\n autohold: PropTypes.object,\n isFetching: PropTypes.bool.isRequired,\n fetchAutohold: PropTypes.func.isRequired,\n }\n\n updateData = () => {\n if (!this.props.autohold) {\n this.props.fetchAutohold(\n this.props.tenant,\n this.props.match.params.requestId\n )\n }\n }\n\n componentDidMount() {\n document.title = 'Zuul Autohold Request'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render() {\n const { autohold, isFetching, tenant } = this.props\n\n // Initial page load\n if (autohold === undefined || isFetching) {\n return \n }\n\n // Fetching finished, but no autohold found\n if (!autohold) {\n return (\n \n )\n }\n\n // Return the build list or an empty state if no builds triggered the autohold.\n const buildsContent = autohold.nodes.length > 0 ? (\n \n ) : (\n <>\n {/* Using an hr above the empty state ensures that the space between\n heading (builds) and empty state is filled and the empty state\n doesn't look like it's lost in space. */}\n
\n \n \n \n This autohold request has not triggered yet.\n \n \n \n )\n\n const node_expiration = (autohold.node_expiration === 0) ? 'Indefinitely' : moment.duration(autohold.node_expiration, 'seconds').humanize()\n console.log(autohold.expired)\n const elapsed = autohold.expired ? (Date.now() / 1000 - autohold.expired) : false\n console.log(elapsed)\n const timeToDeletion = autohold.node_expiration + EXPIRED_HOLD_REQUEST_TTL - elapsed\n console.log(timeToDeletion)\n\n\n let deletionInfo, deletionInfoMsg\n if (autohold.node_expiration !== 0 && elapsed) {\n deletionInfoMsg = timeToDeletion > 0 ?\n (<>\n Deletion scheduled in {moment.duration(timeToDeletion, 'seconds').humanize()}\n ) :\n This request is scheduled to be deleted automatically.\n deletionInfo = }\n value={deletionInfoMsg}\n />\n } else {\n deletionInfo = <>\n }\n\n return (\n <>\n \n Autohold Request {autohold.id}\n\n \n \n \n \n }\n value={\n <>\n Project {autohold.project}\n \n }\n />\n }\n value={\n <>\n Filter {autohold.ref_filter}\n \n }\n />\n }\n value={\n <>\n Job {autohold.job}\n \n }\n />\n }\n value={\n <>\n Trigger Count {autohold.current_count} out of {autohold.max_count}\n \n }\n />\n }\n value={\n <>\n Hold Duration {node_expiration}\n \n }\n />\n \n \n \n \n \n \n }\n value={\n <>\n Reason:\n
{autohold.reason}
\n \n }\n />\n {deletionInfo}\n
\n
\n
\n
\n
\n \n \n <BuildIcon\n style={{\n marginRight: 'var(--pf-global--spacer--sm)',\n verticalAlign: '-0.1em',\n }}\n />{' '}\n Held Builds\n \n {buildsContent}\n \n \n )\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n autohold: state.autoholds.autohold,\n tenant: state.tenant,\n isFetching: state.autoholds.isFetching,\n }\n}\n\nconst mapDispatchToProps = { fetchAutohold }\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AutoholdPage)\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n TreeView,\n} from 'patternfly-react'\nimport ReactJson from 'react-json-view'\n\n\nclass Artifact extends React.Component {\n static propTypes = {\n artifact: PropTypes.object.isRequired\n }\n\n render() {\n const { artifact } = this.props\n return (\n \n \n {Object.keys(artifact.metadata).map(key => (\n \n \n \n \n ))}\n \n
{key}\n {typeof(artifact.metadata[key]) === 'object'?\n \n :artifact.metadata[key].toString()}\n
\n )\n }\n}\n\nclass ArtifactList extends React.Component {\n static propTypes = {\n artifacts: PropTypes.array.isRequired\n }\n\n render() {\n const { artifacts } = this.props\n\n const nodes = artifacts.map((artifact, index) => {\n const node = {text: {artifact.name},\n icon: null}\n if (artifact.metadata) {\n node['nodes']= [{text: ,\n icon: ''}]\n }\n return node\n })\n\n return (\n <>\n
\n
\n \n
\n \n )\n }\n}\n\nexport default ArtifactList\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\nimport {\n Label,\n} from '@patternfly/react-core'\nimport {\n CheckIcon,\n ExclamationIcon,\n QuestionIcon,\n TimesIcon,\n} from '@patternfly/react-icons'\nimport { ConditionalWrapper } from '../../Misc'\n\nconst RESULT_ICON_CONFIGS = {\n // In progress\n null: {\n icon: QuestionIcon,\n color: 'var(--pf-global--info-color--100)',\n badgeColor: 'blue',\n },\n SUCCESS: {\n icon: CheckIcon,\n color: 'var(--pf-global--success-color--100)',\n badgeColor: 'green',\n },\n FAILURE: {\n icon: TimesIcon,\n color: 'var(--pf-global--danger-color--100)',\n badgeColor: 'red',\n },\n RETRY_LIMIT: {\n icon: TimesIcon,\n color: 'var(--pf-global--danger-color--100)',\n badgeColor: 'red',\n },\n SKIPPED: {\n icon: QuestionIcon,\n color: 'var(--pf-global--info-color--100)',\n badgeColor: 'blue',\n },\n ABORTED: {\n icon: QuestionIcon,\n color: 'var(--pf-global--info-color--100)',\n badgeColor: 'yellow',\n },\n MERGE_CONFLICT: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n MERGE_FAILURE: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n NODE_FAILURE: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n TIMED_OUT: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n POST_FAILURE: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n CONFIG_ERROR: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n}\n\nconst DEFAULT_RESULT_ICON_CONFIG = {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n}\n\nfunction BuildResult(props) {\n const { result, link = undefined, colored = true } = props\n const iconConfig = RESULT_ICON_CONFIGS[result] || DEFAULT_RESULT_ICON_CONFIG\n const color = colored ? iconConfig.color : 'inherit'\n\n return (\n \n {children}}\n >\n {result || 'In Progress'}\n \n \n )\n}\n\nBuildResult.propTypes = {\n result: PropTypes.string,\n link: PropTypes.string,\n colored: PropTypes.bool,\n}\n\nfunction BuildResultBadge(props) {\n const { result } = props\n const iconConfig = RESULT_ICON_CONFIGS[result] || DEFAULT_RESULT_ICON_CONFIG\n const color = iconConfig.badgeColor\n\n return (\n \n {result || 'In Progress'}\n \n )\n}\n\nBuildResultBadge.propTypes = {\n result: PropTypes.string,\n}\n\nfunction BuildResultWithIcon(props) {\n const { result, link = undefined, colored = true, size = 'sm' } = props\n const iconConfig = RESULT_ICON_CONFIGS[result] || DEFAULT_RESULT_ICON_CONFIG\n\n // Define the verticalAlign based on the size\n let verticalAlign = '-0.2em'\n\n if (size === 'md') {\n verticalAlign = '-0.35em'\n }\n\n const Icon = iconConfig.icon\n const color = colored ? iconConfig.color : 'inherit'\n\n return (\n \n {children}}\n >\n \n {props.children}\n \n \n )\n}\n\nBuildResultWithIcon.propTypes = {\n result: PropTypes.string,\n link: PropTypes.string,\n colored: PropTypes.bool,\n size: PropTypes.string,\n children: PropTypes.node,\n}\n\n\n\nexport { BuildResult, BuildResultBadge, BuildResultWithIcon }\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport { Flex, FlexItem, List, ListItem, Title } from '@patternfly/react-core'\n\nimport {\n BookIcon,\n BuildIcon,\n CodeBranchIcon,\n CodeIcon,\n CubeIcon,\n FileCodeIcon,\n FingerprintIcon,\n HistoryIcon,\n OutlinedCalendarAltIcon,\n OutlinedClockIcon,\n StreamIcon,\n ThumbtackIcon,\n LockIcon,\n} from '@patternfly/react-icons'\nimport * as moment from 'moment'\nimport 'moment-duration-format'\n\nimport { BuildResultBadge, BuildResultWithIcon } from './Misc'\nimport { buildExternalLink, ExternalLink, IconProperty } from '../../Misc'\n\nimport AutoholdModal from '../autohold/autoholdModal'\n\nfunction Build({ build, tenant, timezone, user }) {\n const [showAutoholdModal, setShowAutoholdModal] = useState(false)\n const change = build.change ? build.change : ''\n const ref = build.change ? '' : build.ref\n const project = build.project\n const job_name = build.job_name\n\n const build_link = buildExternalLink(build)\n\n function renderAutoholdButton() {\n const value = (\n {\n event.preventDefault()\n setShowAutoholdModal(true)\n }}\n >\n Autohold future build failure(s)\n \n )\n return (\n }\n value={value}\n />\n )\n }\n\n\n return (\n <>\n \n \n {build.job_name} {!build.voting && ' (non-voting)'}\n \n \n {build.held &&\n }\n \n {/* We handle the spacing for the body and the flex items by ourselves\n so they go hand in hand. By default, the flex items' spacing only\n affects left/right margin, but not top or bottom (which looks\n awkward when the items are stacked at certain breakpoints) */}\n \n \n \n \n {build_link && (\n }\n value={build_link}\n />\n )}\n {/* TODO (felix): Link to project page in Zuul */}\n }\n value={\n <>\n Project {build.project}\n \n }\n />\n }\n value={\n build.branch ? (\n <>\n Branch {build.branch}\n \n ) : (\n <>\n Ref {build.ref}\n \n )\n }\n />\n }\n value={\n <>\n Pipeline {build.pipeline}\n \n }\n />\n }\n value={\n \n UUID {build.uuid}
\n Event ID {build.event_id}
\n
\n }\n />\n
\n
\n
\n \n \n \n }\n value={\n \n Started at \n {moment\n .utc(build.start_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss')}\n
\n Completed at \n {moment\n .utc(build.end_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss')}\n
\n }\n />\n }\n value={\n <>\n Took \n {moment\n .duration(build.duration, 'seconds')\n .format('h [hr] m [min] s [sec]')}\n \n }\n />\n
\n
\n
\n \n \n \n }\n value={\n \n View job documentation\n \n }\n />\n }\n value={\n \n View buildset result\n \n }\n />\n )}\n }\n value={\n build.log_url ? (\n View log\n ) : (\n \n No log available\n \n )\n }\n />\n {(user.isAdmin && user.scope.indexOf(tenant.name) !== -1) && renderAutoholdButton()}\n \n \n \n
\n {}\n \n )\n}\n\nBuild.propTypes = {\n build: PropTypes.object,\n tenant: PropTypes.object,\n hash: PropTypes.array,\n timezone: PropTypes.string,\n user: PropTypes.object,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n timezone: state.timezone,\n user: state.user,\n}))(Build)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { Fragment } from 'react'\nimport ReAnsi from '@softwarefactory-project/re-ansi'\nimport PropTypes from 'prop-types'\nimport {\n Card,\n CardBody,\n CardHeader,\n Chip,\n DataList,\n DataListItem,\n DataListItemRow,\n DataListItemCells,\n DataListCell,\n Divider,\n Label,\n Flex,\n FlexItem,\n} from '@patternfly/react-core'\n\nimport {\n CheckCircleIcon,\n ContainerNodeIcon,\n TimesIcon,\n TimesCircleIcon,\n} from '@patternfly/react-icons'\n\nclass BuildOutputLabel extends React.Component {\n static propTypes = {\n ok: PropTypes.number,\n changed: PropTypes.number,\n failures: PropTypes.number,\n }\n\n render() {\n let color = this.props.failures ? 'red' : 'green'\n let icon = this.props.failures ? : \n let failures = this.props.failures ? (\n <>\n \n {this.props.failures} Failure{this.props.failures > 1 ? 's' : ''}\n \n ) : null\n\n return (\n \n )\n }\n}\n\n\nclass BuildOutput extends React.Component {\n static propTypes = {\n output: PropTypes.object,\n }\n\n renderHosts (hosts) {\n return (\n <>\n
\n
\n \n {Object.entries(hosts).map(([host, values]) => (\n \n \n \n \n \n  {host}\n \n \n ,\n \n \n \n ]}\n />\n \n \n ))}\n \n
\n \n )\n }\n\n renderFailedTask (host, task) {\n const max_lines = 42\n return (\n \n \n \n  Task {task.name} \n failed running on host {host}\n \n \n {task.invocation && task.invocation.module_args &&\n task.invocation.module_args._raw_params && (\n
\n              {task.invocation.module_args._raw_params}\n            
\n )}\n {task.msg && (\n
{task.msg}
\n )}\n {task.exception && (\n
{task.exception}
\n )}\n {task.stdout_lines && task.stdout_lines.length > 0 && (\n \n {task.stdout_lines.length > max_lines && (\n
\n
\n                    \n                  
\n
)}\n
\n                \n              
\n
\n )}\n {task.stderr_lines && task.stderr_lines.length > 0 && (\n \n {task.stderr_lines.length > max_lines && (\n
\n
\n                    \n                  
\n
\n )}\n
\n                \n              
\n
\n )}\n
\n
\n )\n }\n\n render () {\n const { output } = this.props\n return (\n \n {this.renderHosts(output)}\n
\n {Object.entries(output)\n .filter(([, values]) => values.failed.length > 0)\n .map(([host, values]) => (values.failed.map(failed => (\n this.renderFailedTask(host, failed)))))}\n
\n )\n }\n}\n\n\nexport default BuildOutput\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as moment from 'moment'\nimport 'moment-duration-format'\nimport * as React from 'react'\nimport ReAnsi from '@softwarefactory-project/re-ansi'\nimport PropTypes from 'prop-types'\nimport ReactJson from 'react-json-view'\n\nimport {\n Button,\n Chip,\n DataList,\n DataListItem,\n DataListItemRow,\n DataListCell,\n DataListItemCells,\n DataListToggle,\n DataListContent,\n Divider,\n Flex,\n FlexItem,\n Label,\n Modal,\n Tooltip\n} from '@patternfly/react-core'\n\nimport {\n AngleRightIcon,\n ContainerNodeIcon,\n InfoCircleIcon,\n SearchPlusIcon,\n LinkIcon,\n} from '@patternfly/react-icons'\n\nimport {\n hasInterestingKeys,\n findLoopLabel,\n shouldIncludeKey,\n makeTaskPath,\n taskPathMatches,\n} from '../../actions/build'\n\nconst INTERESTING_KEYS = ['msg', 'cmd', 'stdout', 'stderr']\n\n\nclass TaskOutput extends React.Component {\n static propTypes = {\n data: PropTypes.object,\n include: PropTypes.array,\n }\n\n renderResults(value) {\n const interesting_results = []\n\n // This was written to assume \"value\" is an array of key/value\n // mappings to output. This seems to be a good assumption for the\n // most part, but \"package:\" on at least some distros --\n // RedHat/yum/dnf we've found -- outputs a result that is just an\n // array of strings with what packages were installed. So, if we\n // see an array of strings as the value, we just swizzle that into\n // a key/value so it displays usefully.\n const isAllStrings = value.every(i => typeof i === 'string')\n if (isAllStrings) {\n value = [ {output: [...value]} ]\n }\n\n value.forEach((result, idx) => {\n const keys = Object.entries(result).filter(\n ([key, value]) => shouldIncludeKey(\n key, value, true, this.props.include))\n if (keys.length) {\n interesting_results.push(idx)\n }\n })\n\n return (\n
\n {interesting_results.length>0 &&\n \n
results
\n {interesting_results.map((idx) => (\n
\n

{idx}: {findLoopLabel(value[idx])}

\n {Object.entries(value[idx]).map(([key, value]) => (\n this.renderData(key, value, true)\n ))}\n
\n ))}\n
\n }\n
\n )\n }\n\n renderData(key, value, ignore_underscore) {\n let ret\n if (!shouldIncludeKey(key, value, ignore_underscore, this.props.include)) {\n return ()\n }\n if (value === null) {\n ret = (\n
\n          null\n        
\n )\n } else if (typeof(value) === 'string') {\n ret = (\n
\n          \n        
\n )\n } else if (typeof(value) === 'object') {\n ret = (\n
\n          \n        
\n )\n } else {\n ret = (\n
\n          {value.toString()}\n        
\n )\n }\n\n return (\n
\n {ret &&
{key}
}\n {ret && ret}\n
\n )\n }\n\n render () {\n const { data } = this.props\n\n return (\n \n {Object.entries(data).map(([key, value]) => (\n key==='results'?this.renderResults(value):this.renderData(key, value)\n ))}\n \n )\n }\n}\n\nclass HostTask extends React.Component {\n static propTypes = {\n hostname: PropTypes.string,\n task: PropTypes.object,\n host: PropTypes.object,\n errorIds: PropTypes.object,\n taskPath: PropTypes.array,\n displayPath: PropTypes.array,\n }\n\n state = {\n showModal: false,\n failed: false,\n changed: false,\n skipped: false,\n ok: false\n }\n\n open = () => {\n this.setState({showModal: true})\n }\n\n close = () => {\n this.setState({showModal: false})\n }\n\n constructor (props) {\n super(props)\n\n const { host, taskPath, displayPath } = this.props\n\n if (host.failed) {\n this.state.failed = true\n } else if (host.changed) {\n this.state.changed = true\n } else if (host.skipped) {\n this.state.skipped = true\n } else {\n this.state.ok = true\n }\n\n if (taskPathMatches(taskPath, displayPath))\n this.state.showModal = true\n\n // If it has errors, expand by default\n this.state.expanded = this.props.errorIds.has(this.props.task.task.id)\n }\n\n render () {\n const { hostname, task, host, taskPath } = this.props\n const dataListCells = []\n\n // \"interesting\" result tasks are those that have some values in\n // their results that show command output, etc. These plays get\n // an expansion that shows these values without having to click\n // and bring up the full insepction modal.\n const interestingKeys = hasInterestingKeys(host, INTERESTING_KEYS)\n\n let name = task.task.name\n if (!name) {\n name = host.action\n }\n if (task.role) {\n name = task.role.name + ': ' + name\n }\n\n dataListCells.push(\n {name}\n )\n\n let labelColor = null\n let labelString = null\n\n if (this.state.failed) {\n labelColor = 'red'\n labelString = 'Failed'\n } else if (this.state.changed) {\n labelColor = 'orange'\n labelString = 'Changed'\n } else if (this.state.skipped) {\n labelColor = 'grey'\n labelString = 'Skipped'\n } else if (this.state.ok) {\n labelColor = 'green'\n labelString = 'OK'\n }\n\n dataListCells.push(\n \n Click for details
}>\n \n \n )\n\n dataListCells.push(\n \n \n \n  {hostname}\n \n \n )\n\n let duration = moment.duration(\n moment(task.task.duration.end).diff(task.task.duration.start)\n ).format({\n template: 'h [hr] m [min] s [sec]',\n largest: 2,\n minValue: 1,\n })\n\n dataListCells.push(\n \n {duration}\n \n )\n\n const content = \n\n let item = null\n if (interestingKeys) {\n item = \n \n {this.setState({expanded: !this.state.expanded})}}\n isExpanded={this.state.expanded}\n />\n \n \n \n { content }\n \n \n } else {\n // We currently have to build the data-list item/row/control manually\n // as we don't have a way to hide the toggle. Hopefully PF will\n // add a prop that does this so we can get rid of this, see:\n // https://github.com/patternfly/patternfly/issues/5055\n item =
  • \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
  • \n }\n\n const modalDescription = \n \n \n \n \n \n \n  {hostname}\n \n \n \n \n \n \n \n \n\n return (\n <>\n {item}\n \n \n \n \n )\n }\n}\n\nclass PlayBook extends React.Component {\n static propTypes = {\n playbook: PropTypes.object,\n errorIds: PropTypes.object,\n taskPath: PropTypes.array,\n displayPath: PropTypes.array,\n }\n\n constructor(props) {\n super(props)\n this.state = {\n // Start the playbook expanded if\n // * has errror in it\n // * direct link\n // * it is a run playbook\n expanded: (this.props.errorIds.has(this.props.playbook.phase + this.props.playbook.index) ||\n taskPathMatches(this.props.taskPath, this.props.displayPath) ||\n this.props.playbook.phase === 'run'),\n // NOTE(ianw) 2022-08-26 : Plays start expanded because that is\n // what it has always done; most playbooks probably only have\n // one play. Maybe if there's multiple plays things could start\n // rolled up?\n playsExpanded: this.props.playbook.plays.map((play, idx) => this.makePlayId(play, idx))\n }\n }\n\n makePlayId = (play, idx) => play.play.name + '-' + idx\n\n render () {\n const { playbook, errorIds, taskPath, displayPath } = this.props\n\n const togglePlays = id => {\n const index = this.state.playsExpanded.indexOf(id)\n const newExpanded =\n index >= 0 ? [...this.state.playsExpanded.slice(0, index), ...this.state.playsExpanded.slice(index + 1, this.state.playsExpanded.length)] : [...this.state.playsExpanded, id]\n this.setState({playsExpanded: newExpanded})\n }\n\n // This is the header for each playbook\n let dataListCells = []\n dataListCells.push(\n \n \n {playbook.phase[0].toUpperCase() + playbook.phase.slice(1)} playbook<\n /strong>\n )\n dataListCells.push(\n \n {playbook.playbook}\n )\n if (playbook.trusted) {\n dataListCells.push(\n \n This playbook runs in a trusted execution context, which permits executing code on the Zuul executor and allows access to all Ansible features.
    }>\n )\n } else {\n // NOTE(ianw) : This empty cell keeps things lined up\n // correctly. We tried a \"untrusted\" label but preferred\n // without.\n dataListCells.push()\n }\n\n return (\n \n\n \n this.setState({expanded: !this.state.expanded})}\n isExpanded={this.state.expanded}/>\n \n \n\n \n\n {playbook.plays.map((play, idx) => (\n \n \n \n togglePlays(this.makePlayId(play, idx))}\n isExpanded={this.state.playsExpanded.includes(this.makePlayId(play, idx))}\n id={this.makePlayId(play, idx)}/>\n Play: {play.play.name}\n ]}\n />\n \n \n\n \n {play.tasks.map((task, idx2) => (\n Object.entries(task.hosts).map(([hostname, host]) => (\n \n ))))}\n \n\n \n \n \n ))}\n\n \n \n )\n }\n}\n\n\nclass Console extends React.Component {\n static propTypes = {\n errorIds: PropTypes.object,\n output: PropTypes.array,\n displayPath: PropTypes.array,\n }\n\n render () {\n const { errorIds, output, displayPath } = this.props\n\n return (\n \n
    \n \n \n {\n output.map((playbook, idx) => (\n ))\n }\n \n \n
    \n )\n }\n}\n\n\nexport default Console\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n TreeView,\n} from 'patternfly-react'\nimport { Link } from 'react-router-dom'\n\nimport { renderTree } from '../../actions/build'\n\n\nclass Manifest extends React.Component {\n static propTypes = {\n tenant: PropTypes.object.isRequired,\n build: PropTypes.object.isRequired\n }\n\n render() {\n const { tenant, build } = this.props\n\n const raw_suffix = (obj) => {\n return (obj.mimetype === 'application/directory' &&\n build.manifest.index_links) ? 'index.html' : ''\n }\n\n const nodes = build.manifest.tree.map(\n n => renderTree(\n tenant, build, '/', n,\n (tenant, build, path, name, log_url, obj) => (\n \n \n {obj.name}\n \n   (raw\n  )\n ),\n (log_url, path, name, obj) => (\n \n {obj.name}\n   (raw\n  )\n \n )))\n\n return (\n \n
    \n
    \n \n
    \n
    \n )\n }\n}\n\nexport default Manifest\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n Divider,\n EmptyState,\n EmptyStateVariant,\n EmptyStateIcon,\n Title,\n ToggleGroup,\n ToggleGroupItem,\n} from '@patternfly/react-core'\nimport { FileCodeIcon } from '@patternfly/react-icons'\n\nimport { Fetching } from '../Fetching'\n\n// Helper function to sort list of numbers in ascending order\nconst sortNumeric = (a, b) => a - b\n\n// When scrolling down to a highlighted section, we don't want to want to keep a little bit of\n// context.\nconst SCROLL_OFFSET = -50\n\nexport default function LogFile({\n logfileName,\n logfileContent,\n isFetching,\n handleBreadcrumbItemClick,\n location,\n history,\n ...props\n}) {\n const [severity, setSeverity] = useState(props.severity)\n const [highlightStart, setHighlightStart] = useState(0)\n const [highlightEnd, setHighlightEnd] = useState(0)\n // We only want to scroll down to the highlighted section if the highlight\n // fields we're populated from the URL parameters. Here we assume that we\n // always want to scroll when the page is loaded and therefore disable the\n // initialScroll parameter in the onClick handler that is called when a line\n // or section is marked.\n const [scrollOnPageLoad, setScrollOnPageLoad] = useState(true)\n\n useEffect(() => {\n // Only highlight the lines if the log is present (otherwise it doesn't make\n // sense). Although, scrolling to the selected section only works once the\n // necessary log lines are part of the DOM tree.\n // Additionally note that if we set highlightStart before the page content\n // is available then the window scrolling won't match any lines and we won't\n // scroll. Then when we try to set highlightStart after page content is loaded\n // the value isn't different than what is set previously preventing the\n // scroll event from firing.\n if (!isFetching) {\n // Get the line numbers to highlight from the URL and directly cast them to\n // a number. The substring(1) removes the '#' character.\n const lines = location.hash\n .substring(1)\n .split('-')\n .map(Number)\n .sort(sortNumeric)\n if (lines.length > 1) {\n setHighlightStart(lines[0])\n setHighlightEnd(lines[1])\n } else if (lines.length === 1) {\n setHighlightStart(lines[0])\n setHighlightEnd(lines[0])\n }\n }\n }, [location.hash, isFetching])\n\n useEffect(() => {\n const scrollToHighlightedLine = () => {\n const elements = document.getElementsByClassName('ln-' + highlightStart)\n if (elements.length > 0) {\n // When scrolling down to the highlighted section keep some vertical\n // offset so we can see some contextual log lines.\n const y =\n elements[0].getBoundingClientRect().top +\n window.pageYOffset +\n SCROLL_OFFSET\n window.scrollTo({ top: y, behavior: 'smooth' })\n }\n }\n\n if (scrollOnPageLoad) {\n scrollToHighlightedLine()\n }\n }, [scrollOnPageLoad, highlightStart])\n\n function handleItemClick(isSelected, event) {\n const id = parseInt(event.currentTarget.id)\n setSeverity(id)\n writeSeverityToUrl(id)\n // TODO (felix): Should we add a state for the toggling \"progress\", so we\n // can show a spinner (like fetching) when the new log level lines are\n // \"calculated\". As this might take some time, the UI is often unresponsive\n // when clicking on a log level button.\n }\n\n function writeSeverityToUrl(severity) {\n const urlParams = new URLSearchParams('')\n urlParams.append('severity', severity)\n history.push({\n pathname: location.pathname,\n search: urlParams.toString(),\n })\n }\n\n function updateSelection(event) {\n const lines = window.location.hash.substring(1).split('-').map(Number)\n const lineClicked = Number(event.currentTarget.innerText)\n if (!event.shiftKey || lines.length === 0) {\n // First line clicked\n lines[0] = [lineClicked]\n lines.splice(1, 1)\n } else {\n // Second line shift-clicked\n const distances = lines.map((pos) => Math.abs(lineClicked - pos))\n // Adjust the range based on the edge distance\n if (distances[0] < distances[1]) {\n lines[0] = lineClicked\n } else {\n lines[1] = lineClicked\n }\n }\n window.location.hash = '#' + lines.sort(sortNumeric).join('-')\n // We don't want to scroll to that section if we just highlighted the lines\n setScrollOnPageLoad(false)\n }\n\n function renderLogfile(logfileContent, severity) {\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n
    \n          \n            \n              {logfileContent.map((line) => {\n                // Highlight the line if it's part of the selected range\n                const highlightLine =\n                  line.index >= highlightStart && line.index <= highlightEnd\n                return (\n                  line.severity >= severity && (\n                    \n                      \n                      \n                    \n                  )\n                )\n              })}\n            \n          
    \n {line.index}\n \n \n {line.text + '\\n'}\n \n
    \n
    \n \n )\n }\n\n // Split the logfile's name to show some breadcrumbs\n const logfilePath = logfileName.split('/')\n\n const content =\n !logfileContent && isFetching ? (\n \n ) : logfileContent ? (\n renderLogfile(logfileContent, severity)\n ) : (\n \n \n \n This logfile could not be found\n \n \n )\n\n return (\n <>\n
    \n \n as link which would post-back to the server.\n to=\"#\"\n onClick={() => handleBreadcrumbItemClick()}\n >\n Logs\n \n {logfilePath.map((part, index) => (\n \n {part}\n \n ))}\n \n
    \n {content}\n \n )\n}\n\nLogFile.propTypes = {\n logfileName: PropTypes.string.isRequired,\n logfileContent: PropTypes.array,\n severity: PropTypes.number,\n isFetching: PropTypes.bool.isRequired,\n handleBreadcrumbItemClick: PropTypes.func.isRequired,\n location: PropTypes.object.isRequired,\n history: PropTypes.object.isRequired,\n}\n\nLogFile.defaultProps = {\n severity: 0,\n}\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport { withRouter } from 'react-router-dom'\nimport PropTypes from 'prop-types'\nimport { parse } from 'query-string'\nimport {\n Button,\n EmptyState,\n EmptyStateVariant,\n EmptyStateIcon,\n PageSection,\n PageSectionVariants,\n Tab,\n Tabs,\n TabTitleIcon,\n TabTitleText,\n Title,\n} from '@patternfly/react-core'\nimport {\n ArrowUpIcon,\n BuildIcon,\n FileArchiveIcon,\n FileCodeIcon,\n TerminalIcon,\n PollIcon,\n ExclamationIcon,\n} from '@patternfly/react-icons'\n\nimport { fetchBuildAllInfo } from '../actions/build'\nimport { fetchLogfile } from '../actions/logfile'\nimport { EmptyPage } from '../containers/Errors'\nimport { Fetching } from '../containers/Fetching'\nimport ArtifactList from '../containers/build/Artifact'\nimport Build from '../containers/build/Build'\nimport BuildOutput from '../containers/build/BuildOutput'\nimport Console from '../containers/build/Console'\nimport Manifest from '../containers/build/Manifest'\nimport LogFile from '../containers/logfile/LogFile'\n\nclass BuildPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n build: PropTypes.object,\n logfile: PropTypes.object,\n isFetching: PropTypes.bool.isRequired,\n isFetchingManifest: PropTypes.bool.isRequired,\n isFetchingOutput: PropTypes.bool.isRequired,\n isFetchingLogfile: PropTypes.bool.isRequired,\n tenant: PropTypes.object.isRequired,\n fetchBuildAllInfo: PropTypes.func.isRequired,\n activeTab: PropTypes.string.isRequired,\n location: PropTypes.object.isRequired,\n history: PropTypes.object.isRequired,\n }\n\n state = {\n topOfPageVisible: true,\n }\n\n updateData = () => {\n // The related fetchBuild...() methods won't do anything if the data is\n // already available in the local state, so just call them.\n this.props.fetchBuildAllInfo(\n this.props.tenant,\n this.props.match.params.buildId,\n this.props.match.params.file\n )\n }\n\n onScroll = () => {\n this.setState({topOfPageVisible: window.scrollY === 0})\n }\n\n componentDidMount() {\n document.title = 'Zuul Build'\n if (this.props.tenant.name) {\n this.updateData()\n }\n window.addEventListener('scroll', this.onScroll)\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n handleTabClick = (tabIndex, build) => {\n // Usually tabs should only be used to display content in-page and not link\n // to other pages:\n // \"Tabs are used to present a set on tabs for organizing content on a\n // .page. It must always be used together with a tab content component.\"\n // https://www.patternfly.org/v4/documentation/react/components/tabs\n // But as want to be able to reach every tab's content via a dedicated URL\n // while having the look and feel of tabs, we could hijack this onClick\n // handler to do the link/routing stuff.\n const { history, tenant } = this.props\n\n switch (tabIndex) {\n case 'artifacts':\n history.push(`${tenant.linkPrefix}/build/${build.uuid}/artifacts`)\n break\n case 'logs':\n history.push(`${tenant.linkPrefix}/build/${build.uuid}/logs`)\n break\n case 'console':\n history.push(`${tenant.linkPrefix}/build/${build.uuid}/console`)\n break\n default:\n // task summary\n history.push(`${tenant.linkPrefix}/build/${build.uuid}`)\n }\n }\n\n handleBreadcrumbItemClick = () => {\n // Simply link back to the logs tab without an active logfile\n this.handleTabClick('logs', this.props.build)\n }\n\n render() {\n const {\n build,\n logfile,\n isFetching,\n isFetchingManifest,\n isFetchingOutput,\n isFetchingLogfile,\n activeTab,\n history,\n location,\n tenant,\n } = this.props\n const hash = location.hash.substring(1).split('/')\n const severity = parseInt(parse(location.search).severity)\n\n // Get the logfile from react-routers URL parameters\n const logfileName = this.props.match.params.file\n\n // In case the build is not available yet (before the fetching started) or\n // is currently fetching.\n if (build === undefined || isFetching) {\n return \n }\n\n // The build is null, meaning it couldn't be found.\n if (!build) {\n return (\n \n )\n }\n\n const resultsTabContent =\n build.hosts === undefined || isFetchingOutput ? (\n \n ) : build.hosts ? (\n \n ) : build.error_detail ? (\n <>\n \n \n \n

    Error: {build.error_detail}

    \n \n ) : (\n \n \n \n This build does not provide any results\n \n \n )\n\n const artifactsTabContent = build.artifacts.length ? (\n \n ) : (\n \n \n \n This build does not provide any artifacts\n \n \n )\n\n let logsTabContent = null\n if (build.manifest === undefined || isFetchingManifest) {\n logsTabContent = \n } else if (logfileName) {\n logsTabContent = (\n \n )\n } else if (build.manifest) {\n logsTabContent = \n } else {\n logsTabContent = (\n \n \n \n This build does not provide any logs\n \n \n )\n }\n\n const consoleTabContent =\n build.output === undefined || isFetchingOutput ? (\n \n ) : build.output ? (\n 0 ? hash : undefined}\n />\n ) : (\n \n \n \n This build does not provide any console information\n \n \n )\n\n return (\n <>\n \n \n \n \n this.handleTabClick(tabIndex, build)}\n >\n \n \n \n \n Task Summary\n \n }\n >\n {resultsTabContent}\n \n \n \n \n \n Artifacts\n \n }\n >\n {artifactsTabContent}\n \n \n \n \n \n Logs\n \n }\n >\n {logsTabContent}\n \n \n \n \n \n Console\n \n }\n >\n {consoleTabContent}\n \n \n \n {!this.state.topOfPageVisible && (\n \n \n \n )}\n \n )\n }\n}\n\nfunction scrollToTop() {\n window.scrollTo(0,0)\n document.activeElement.blur()\n}\n\nfunction mapStateToProps(state, ownProps) {\n const buildId = ownProps.match.params.buildId\n // JavaScript will return undefined in case the key is missing in the\n // dict/object.\n const buildFromState = state.build.builds[buildId]\n // Only copy the build if it's a valid object. In case it is null or undefined\n // directly assign the value. The cloning is necessary as we mutate the build\n // in the next step when adding the manifest, output, ... information.\n const build = buildFromState ? { ...buildFromState } : buildFromState\n\n // If the build is available, extend it with more information. All those\n // values will be undefined if they are not part of the dict/object.\n if (build) {\n build.manifest = state.build.manifests[buildId]\n build.output = state.build.outputs[buildId]\n build.hosts = state.build.hosts[buildId]\n build.errorIds = state.build.errorIds[buildId]\n }\n const logfileName = ownProps.match.params.file\n const logfile =\n buildId in state.logfile.files\n ? state.logfile.files[buildId][logfileName]\n : undefined\n\n return {\n build,\n logfile,\n tenant: state.tenant,\n isFetching: state.build.isFetching,\n isFetchingManifest: state.build.isFetchingManifest,\n isFetchingOutput: state.build.isFetchingOutput,\n isFetchingLogfile: state.logfile.isFetching,\n }\n}\n\nconst mapDispatchToProps = { fetchBuildAllInfo, fetchLogfile }\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(withRouter(BuildPage))\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport {\n Chip,\n ChipGroup,\n Select,\n SelectOption,\n SelectVariant,\n} from '@patternfly/react-core'\n\n\nfunction FilterSelect(props) {\n const { filters, category } = props\n\n const [isOpen, setIsOpen] = useState(false)\n const [selected, setSelected] = useState(filters[category.key])\n const [options, setOptions] = useState(category.options)\n\n function onToggle(isOpen) {\n setSelected(filters[category.key])\n setIsOpen(isOpen)\n }\n\n function onSelect(event, selection) {\n const { onFilterChange, filters, category } = props\n\n const newSelected = selected.includes(selection)\n ? selected.filter(item => item !== selection)\n : [...selected, selection]\n\n setSelected(newSelected)\n const newFilters = {\n ...filters,\n [category.key]: newSelected,\n }\n onFilterChange(newFilters)\n }\n\n function onClear() {\n const { onFilterChange, filters, category } = props\n setSelected([])\n setIsOpen(false)\n const newFilters = {\n ...filters,\n [category.key]: [],\n }\n onFilterChange(newFilters)\n }\n\n function chipGroupComponent() {\n const { filters, category } = props\n const chipped = filters[category.key]\n return (\n \n {chipped.map((currentChip, index) => (\n onSelect(e, currentChip)}\n >\n {currentChip}\n \n ))}\n \n )\n }\n\n function onCreateOption(newValue) {\n const newOptions = [...options, newValue]\n setOptions(newOptions)\n }\n\n return (\n \n {\n options.map((option, index) => (\n \n ))\n }\n \n )\n}\n\nFilterSelect.propTypes = {\n onFilterChange: PropTypes.func.isRequired,\n filters: PropTypes.object.isRequired,\n category: PropTypes.object.isRequired,\n}\n\nexport { FilterSelect }\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport {\n Select,\n SelectOption,\n SelectVariant,\n} from '@patternfly/react-core'\n\n\nfunction FilterTernarySelect(props) {\n /* The ternary select expects the options to be in order: All/True/False */\n const { filters, category } = props\n\n const [isOpen, setIsOpen] = useState(false)\n const options = category.options\n const _getSelected = (value) => {\n switch (value) {\n case 1:\n case '1':\n return category.options[1]\n case 0:\n case '0':\n return category.options[2]\n default:\n return null\n }\n }\n let _selected = _getSelected([...filters[category.key]].pop())\n const [selected, setSelected] = useState(_selected)\n\n function onToggle(isOpen) {\n setIsOpen(isOpen)\n }\n\n function onSelect(event, selection) {\n const { onFilterChange, filters, category } = props\n\n let _selection = (selection === selected) ? null : selection\n\n setSelected(_selection)\n const setNewFilter = (value) => {\n switch (value) {\n case category.options[1]:\n return [1,]\n case category.options[2]:\n return [0,]\n default:\n return []\n }\n }\n const newFilters = {\n ...filters,\n [category.key]: setNewFilter(_selection),\n }\n onFilterChange(newFilters)\n setIsOpen(false)\n }\n\n function onClear() {\n const { onFilterChange, filters, category } = props\n setSelected(null)\n setIsOpen(false)\n const newFilters = {\n ...filters,\n [category.key]: [],\n }\n onFilterChange(newFilters)\n }\n\n return (\n \n {\n options.map((option, index) => (\n \n ))\n }\n \n )\n}\n\nFilterTernarySelect.propTypes = {\n onFilterChange: PropTypes.func.isRequired,\n filters: PropTypes.object.isRequired,\n category: PropTypes.object.isRequired,\n}\n\nexport { FilterTernarySelect }","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nimport {\n Checkbox,\n} from '@patternfly/react-core'\n\n\nfunction FilterCheckbox(props) {\n const { filters, category, onFilterChange } = props\n\n function onChange(checked) {\n const newFilters = {\n ...filters,\n [category.key]: checked ? [1,] : [],\n }\n onFilterChange(newFilters)\n }\n\n return (\n \n )\n}\n\nFilterCheckbox.propTypes = {\n onFilterChange: PropTypes.func.isRequired,\n filters: PropTypes.object.isRequired,\n category: PropTypes.object.isRequired,\n}\n\nexport { FilterCheckbox }","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Button,\n ButtonVariant,\n Dropdown,\n DropdownItem,\n DropdownPosition,\n DropdownToggle,\n InputGroup,\n TextInput,\n Toolbar,\n ToolbarContent,\n ToolbarFilter,\n ToolbarGroup,\n ToolbarItem,\n ToolbarToggleGroup,\n} from '@patternfly/react-core'\nimport { FilterIcon, SearchIcon } from '@patternfly/react-icons'\n\nimport { FilterSelect } from './filters/Select'\nimport { FilterTernarySelect } from './filters/TernarySelect'\nimport { FilterCheckbox } from './filters/Checkbox'\n\n\nfunction FilterToolbar(props) {\n const [isCategoryDropdownOpen, setIsCategoryDropdownOpen] = useState(false)\n const [currentCategory, setCurrentCategory] = useState(\n props.filterCategories[0].title\n )\n const [inputValue, setInputValue] = useState('')\n\n function handleCategoryToggle(isOpen) {\n setIsCategoryDropdownOpen(isOpen)\n }\n\n function handleCategorySelect(event) {\n setCurrentCategory(event.target.innerText)\n setIsCategoryDropdownOpen(!isCategoryDropdownOpen)\n }\n\n function handleInputChange(newValue) {\n setInputValue(newValue)\n }\n\n function handleInputSend(event, category) {\n const { onFilterChange, filters } = props\n\n // In case the event comes from a key press, only accept \"Enter\"\n if (event.key && event.key !== 'Enter') {\n return\n }\n\n // Ignore empty values\n if (!inputValue) {\n return\n }\n\n const prevFilters = filters[category.key]\n const newFilters = {\n ...filters,\n [category.key]: prevFilters.includes(inputValue)\n ? prevFilters\n : [...prevFilters, inputValue],\n }\n\n // Clear the input field\n setInputValue('')\n // Notify the parent component about the filter change\n onFilterChange(newFilters)\n }\n\n function handleDelete(type = '', id = '', category) {\n const { filterCategories, filters, onFilterChange } = props\n\n // Usually the type contains the category for which a chip should be deleted\n // If the type is set, we got a delete() call for a single chip. The type\n // reflects the name of the Chip group which does not necessarily go in hand\n // with our category keys. Thus, we use the category to identify the correct\n // filter to be updated/removed.\n let newFilters = {}\n if (type) {\n if (category.type === 'ternary') {\n newFilters = {\n ...filters,\n [category.key]: [],\n }\n } else {\n newFilters = {\n ...filters,\n [category.key]: filters[category.key].filter((s) => s !== id),\n }\n }\n } else {\n // Delete the values for each filter category\n newFilters = filterCategories.reduce((filterDict, category) => {\n filterDict[category.key] = []\n return filterDict\n }, {})\n }\n\n // Notify the parent component about the filter change\n onFilterChange(newFilters)\n }\n\n function renderCategoryDropdown() {\n const { filterCategories } = props\n\n return (\n \n \n {currentCategory}\n \n }\n isOpen={isCategoryDropdownOpen}\n dropdownItems={filterCategories.filter(\n (category) => (category.type === 'search' ||\n category.type === 'select' ||\n category.type === 'ternary' ||\n category.type === 'checkbox')\n ).map((category) => (\n {category.title}\n ))}\n style={{ width: '100%' }}\n />\n \n )\n }\n\n function renderFilterInput(category, filters) {\n const { onFilterChange } = props\n if (category.type === 'search') {\n return (\n \n handleInputSend(event, category)}\n />\n handleInputSend(event, category)}\n >\n \n \n \n )\n } else if (category.type === 'select') {\n return (\n \n \n \n )\n } else if (category.type === 'ternary') {\n return (\n \n \n \n )\n } else if (category.type === 'checkbox') {\n return (\n \n
    \n \n
    \n )\n }\n }\n\n function renderFilterDropdown() {\n const { filterCategories, filters } = props\n\n return (\n <>\n {filterCategories.map((category) => (\n handleDelete(type, id, category)}\n categoryName={category.title}\n showToolbarItem={currentCategory === category.title}\n >\n {renderFilterInput(category, filters)}\n \n ))}\n \n )\n }\n\n return (\n <>\n \n \n } breakpoint=\"md\">\n \n {renderCategoryDropdown()}\n {renderFilterDropdown()}\n \n \n \n \n \n )\n}\n\nFilterToolbar.propTypes = {\n onFilterChange: PropTypes.func.isRequired,\n filters: PropTypes.object.isRequired,\n filterCategories: PropTypes.array.isRequired,\n}\n\nfunction getChipsFromFilters(filters, category) {\n if (category.type === 'ternary') {\n switch ([...filters[category.key]].pop()) {\n case 1:\n case '1':\n return ['True',]\n case 0:\n case '0':\n return ['False',]\n default:\n return []\n }\n } else {\n return filters[category.key]\n }\n}\n\nfunction getFiltersFromUrl(location, filterCategories) {\n const urlParams = new URLSearchParams(location.search)\n const _filters = filterCategories.reduce((filterDict, item) => {\n // Initialize each filter category with an empty list\n filterDict[item.key] = []\n\n // And update the list with each matching element from the URL query\n urlParams.getAll(item.key).forEach((param) => {\n if (item.type === 'checkbox') {\n switch (param) {\n case '1':\n filterDict[item.key].push(1)\n break\n case '0':\n filterDict[item.key].push(0)\n break\n default:\n break\n }\n } else {\n filterDict[item.key].push(param)\n }\n })\n return filterDict\n }, {})\n const pagination_options = {\n skip: urlParams.getAll('skip') ? urlParams.getAll('skip') : [0,],\n limit: urlParams.getAll('limit') ? urlParams.getAll('limit') : [50,],\n }\n const filters = { ..._filters, ...pagination_options }\n return filters\n}\n\nfunction writeFiltersToUrl(filters, location, history) {\n // Build new URL parameters from the filters in state\n const searchParams = new URLSearchParams('')\n Object.keys(filters).map((key) => {\n filters[key].forEach((value) => {\n searchParams.append(key, value)\n })\n return searchParams\n })\n history.push({\n pathname: location.pathname,\n search: searchParams.toString(),\n })\n}\n\nfunction buildQueryString(filters, excludeResults) {\n let queryString = '&complete=true'\n let resultFilter = false\n if (filters) {\n Object.keys(filters).map((key) => {\n filters[key].forEach((value) => {\n if (key === 'result') {\n resultFilter = true\n }\n queryString += '&' + key + '=' + value\n })\n return queryString\n })\n }\n if (excludeResults && !resultFilter) {\n queryString += '&exclude_result=SKIPPED'\n }\n return queryString\n}\n\nexport { buildQueryString, FilterToolbar, getFiltersFromUrl, writeFiltersToUrl }\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n Button,\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n EmptyStateSecondaryActions,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n BuildIcon,\n CodeBranchIcon,\n CodeIcon,\n CubeIcon,\n OutlinedCalendarAltIcon,\n OutlinedClockIcon,\n PollIcon,\n StreamIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n truncate,\n breakWord,\n cellWidth,\n} from '@patternfly/react-table'\nimport 'moment-duration-format'\nimport * as moment from 'moment'\n\nimport { BuildResult, BuildResultWithIcon } from './Misc'\nimport { buildExternalTableLink, IconProperty } from '../../Misc'\n\nfunction BuildTable({\n builds,\n fetching,\n onClearFilters,\n tenant,\n timezone,\n history,\n}) {\n const columns = [\n {\n title: } value=\"Job\" />,\n dataLabel: 'Job',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Project\" />,\n dataLabel: 'Project',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Branch\" />,\n dataLabel: 'Branch',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Pipeline\" />,\n dataLabel: 'Pipeline',\n },\n {\n title: } value=\"Change\" />,\n dataLabel: 'Change',\n transforms: [cellWidth(10)],\n cellTransforms: [truncate],\n },\n {\n title: } value=\"Duration\" />,\n dataLabel: 'Duration',\n },\n {\n title: (\n } value=\"Start time\" />\n ),\n dataLabel: 'Start time',\n },\n {\n title: } value=\"Result\" />,\n dataLabel: 'Result',\n },\n ]\n\n function createBuildRow(build) {\n const changeOrRefLink = buildExternalTableLink(build)\n\n return {\n // Pass the build's uuid as row id, so we can use it later on in the\n // action handler to build the link to the build result page for each row.\n id: build.uuid,\n cells: [\n {\n // To allow passing anything else than simple string values to a table\n // cell, we must use the title attribute.\n title: (\n <>\n \n {build.job_name}\n {!build.voting && ' (non-voting)'}\n \n \n ),\n },\n {\n title: build.project,\n },\n {\n title: build.branch ? build.branch : build.ref,\n },\n {\n title: build.pipeline,\n },\n {\n title: changeOrRefLink && changeOrRefLink,\n },\n {\n title: moment\n .duration(build.duration, 'seconds')\n .format('h [hr] m [min] s [sec]'),\n },\n {\n title: moment\n .utc(build.start_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss'),\n },\n {\n title: (\n \n ),\n },\n ],\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n let rows = []\n // For the fetching row we don't need any actions, so we keep them empty by\n // default.\n let actions = []\n if (fetching) {\n rows = createFetchingRow()\n // The dataLabel property is used to show the column header in a list-like\n // format for smaller viewports. When we are fetching, we don't want the\n // fetching row to be prepended by a \"Job\" column header. The other column\n // headers are not relevant here since we only have a single cell in the\n // fetcihng row.\n columns[0].dataLabel = ''\n } else {\n rows = builds.map((build) => createBuildRow(build))\n // This list of actions will be applied to each row in the table. For\n // row-specific actions we must evaluate the individual row data provided to\n // the onClick handler.\n actions = [\n {\n title: 'Show build result',\n onClick: (event, rowId, rowData) =>\n // The row's id contains the build's uuid, so we can use this to build\n // the correct link.\n history.push(`${tenant.linkPrefix}/build/${rowData.id}`),\n },\n ]\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any builds but are also not\n fetching */}\n {!fetching && builds.length === 0 && (\n \n \n No builds found\n \n No builds match this filter criteria. Remove some filters or clear\n all to show results.\n \n \n \n \n \n )}\n \n )\n}\n\nBuildTable.propTypes = {\n builds: PropTypes.array.isRequired,\n fetching: PropTypes.bool.isRequired,\n onClearFilters: PropTypes.func.isRequired,\n tenant: PropTypes.object.isRequired,\n timezone: PropTypes.string.isRequired,\n history: PropTypes.object.isRequired,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n timezone: state.timezone,\n}))(BuildTable)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { isEqual } from 'lodash'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport 'moment-duration-format'\nimport { PageSection, PageSectionVariants, Pagination } from '@patternfly/react-core'\n\nimport { fetchBuilds } from '../api'\nimport {\n buildQueryString,\n FilterToolbar,\n getFiltersFromUrl,\n writeFiltersToUrl,\n} from '../containers/FilterToolbar'\nimport BuildTable from '../containers/build/BuildTable'\n\nclass BuildsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n timezone: PropTypes.string,\n location: PropTypes.object,\n history: PropTypes.object,\n }\n\n constructor(props) {\n super()\n this.filterCategories = [\n {\n key: 'job_name',\n title: 'Job',\n placeholder: 'Filter by Job...',\n type: 'search',\n },\n {\n key: 'project',\n title: 'Project',\n placeholder: 'Filter by Project...',\n type: 'search',\n },\n {\n key: 'branch',\n title: 'Branch',\n placeholder: 'Filter by Branch...',\n type: 'search',\n },\n {\n key: 'pipeline',\n title: 'Pipeline',\n placeholder: 'Filter by Pipeline...',\n type: 'search',\n },\n {\n key: 'change',\n title: 'Change',\n placeholder: 'Filter by Change...',\n type: 'search',\n },\n {\n key: 'result',\n title: 'Result',\n placeholder: 'Any result',\n type: 'select',\n // TODO there should be a single source of truth for this\n options: [\n 'SUCCESS',\n 'FAILURE',\n 'RETRY_LIMIT',\n 'POST_FAILURE',\n 'SKIPPED',\n 'NODE_FAILURE',\n 'MERGE_CONFLICT',\n 'MERGE_FAILURE',\n 'CONFIG_ERROR',\n 'TIMED_OUT',\n 'CANCELED',\n 'ERROR',\n 'RETRY',\n 'DISK_FULL',\n 'NO_JOBS',\n 'DISCONNECT',\n 'ABORTED',\n 'LOST',\n 'EXCEPTION',\n 'NO_HANDLE'],\n },\n {\n key: 'uuid',\n title: 'Build',\n placeholder: 'Filter by Build UUID...',\n type: 'search',\n },\n {\n key: 'held',\n title: 'Held',\n placeholder: 'Choose Hold Status...',\n type: 'ternary',\n options: [\n 'All',\n 'Held Builds Only',\n 'Non Held Builds Only',\n ]\n },\n {\n key: 'voting',\n title: 'Voting',\n placeholder: 'Choose Voting Status...',\n type: 'ternary',\n options: [\n 'All',\n 'Voting Only',\n 'Non-Voting Only',\n ]\n },\n ]\n\n const _filters = getFiltersFromUrl(props.location, this.filterCategories)\n const perPage = _filters.limit[0]\n ? parseInt(_filters.limit[0])\n : 50\n const currentPage = _filters.skip[0]\n ? Math.floor(parseInt(_filters.skip[0] / perPage)) + 1\n : 1\n\n this.state = {\n builds: [],\n fetching: false,\n filters: _filters,\n resultsPerPage: perPage,\n currentPage: currentPage,\n itemCount: null,\n }\n }\n\n updateData = (filters) => {\n // When building the filter query for the API we can't rely on the location\n // search parameters. Although, we've updated them in theu URL directly\n // they always have the same value in here (the values when the page was\n // first loaded). Most probably that's the case because the location is\n // passed as prop and doesn't change since the page itself wasn't\n // re-rendered.\n const { itemCount } = this.state\n let paginationOptions = {\n skip: filters.skip.length > 0 ? filters.skip : [0,],\n limit: filters.limit.length > 0 ? filters.limit : [50,]\n }\n let _filters = { ...filters, ...paginationOptions }\n const queryString = buildQueryString(_filters, true)\n this.setState({ fetching: true })\n // TODO (felix): What happens in case of a broken network connection? Is the\n // fetching shows infinitely or can we catch this and show an erro state in\n // the table instead?\n fetchBuilds(this.props.tenant.apiPrefix, queryString).then((response) => {\n // if we have already an itemCount for this query (ie we're scrolling backwards through results)\n // keep this value. Otherwise, check if we've got all the results.\n let finalItemCount = itemCount\n ? itemCount\n : (response.data.length < paginationOptions.limit[0]\n ? parseInt(paginationOptions.skip[0]) + response.data.length\n : null)\n this.setState({\n builds: response.data,\n fetching: false,\n itemCount: finalItemCount,\n })\n })\n }\n\n componentDidMount() {\n document.title = 'Zuul Builds'\n if (this.props.tenant.name) {\n this.updateData(this.state.filters)\n }\n }\n\n componentDidUpdate(prevProps) {\n const { filters } = this.state\n if (\n this.props.tenant.name !== prevProps.tenant.name ||\n this.props.timezone !== prevProps.timezone\n ) {\n this.updateData(filters)\n }\n }\n\n handleFilterChange = (newFilters) => {\n const { location, history } = this.props\n const { filters, itemCount } = this.state\n /*eslint no-unused-vars: [\"error\", { \"ignoreRestSiblings\": true }]*/\n let { 'skip': x1, 'limit': y1, ..._oldFilters } = filters\n let { 'skip': x2, 'limit': y2, ..._newFilters } = newFilters\n\n // If filters have changed, reinitialize skip\n let equalTest = isEqual(_oldFilters, _newFilters)\n let finalFilters = equalTest ? newFilters : { ...newFilters, skip: [0,] }\n\n // We must update the URL parameters before the state. Otherwise, the URL\n // will always be one filter selection behind the state. But as the URL\n // reflects our state this should be ok.\n writeFiltersToUrl(finalFilters, location, history)\n let newState = {\n filters: finalFilters,\n // if filters haven't changed besides skip or limit, keep our itemCount and currentPage\n itemCount: equalTest ? itemCount : null,\n }\n if (!equalTest) {\n newState.currentPage = 1\n }\n this.setState(\n newState,\n () => {\n this.updateData(finalFilters)\n })\n }\n\n handleClearFilters = () => {\n // Delete the values for each filter category\n const filters = this.filterCategories.reduce((filterDict, category) => {\n filterDict[category.key] = []\n return filterDict\n }, {})\n this.handleFilterChange(filters)\n }\n\n handlePerPageSelect = (event, perPage) => {\n const { filters } = this.state\n this.setState({ resultsPerPage: perPage })\n const newFilters = { ...filters, limit: [perPage,] }\n this.handleFilterChange(newFilters)\n }\n\n handleSetPage = (event, pageNumber) => {\n const { filters, resultsPerPage } = this.state\n this.setState({ currentPage: pageNumber })\n let offset = resultsPerPage * (pageNumber - 1)\n const newFilters = { ...filters, skip: [offset,] }\n this.handleFilterChange(newFilters)\n }\n\n\n render() {\n const { history } = this.props\n const { builds, fetching, filters, resultsPerPage, currentPage, itemCount } = this.state\n\n return (\n \n \n (\n \n \n {firstIndex} - {lastIndex}\n \n  \n of\n  \n {itemCount ? itemCount : 'many'}\n \n )}\n itemCount={itemCount}\n perPage={resultsPerPage}\n page={currentPage}\n widgetId=\"pagination-menu\"\n onPerPageSelect={this.handlePerPageSelect}\n onSetPage={this.handleSetPage}\n isCompact\n />\n \n \n )\n }\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n timezone: state.timezone,\n}))(BuildsPage)\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport {\n DataList,\n DataListCell,\n DataListItem,\n DataListItemRow,\n DataListItemCells,\n Flex,\n FlexItem,\n Switch,\n} from '@patternfly/react-core'\nimport {\n AngleDownIcon,\n AngleRightIcon,\n OutlinedClockIcon\n} from '@patternfly/react-icons'\nimport 'moment-duration-format'\nimport * as moment from 'moment'\n\nimport { BuildResult, BuildResultWithIcon } from './Misc'\nimport { IconProperty } from '../../Misc'\n\nclass BuildList extends React.Component {\n static propTypes = {\n builds: PropTypes.array,\n tenant: PropTypes.object,\n }\n\n // TODO (felix): Add a property \"isCompact\" to be used on the buildresult\n // page. Without this flag we might then even use this (with more\n // information) on the /builds page.\n\n constructor(props) {\n super(props)\n const { builds } = this.props\n let retriedJobs = builds.filter((build) => {\n return !build.final\n }).map((build) => (build.job_name)\n ).filter((build, idx, self) => {\n return self.indexOf(build) === idx\n })\n\n let skippedJobs = builds.filter((build) => {\n return build.result === 'SKIPPED'\n }).map((build) => (build.job_name)\n ).filter((build, idx, self) => {\n return self.indexOf(build) === idx\n })\n\n this.state = {\n visibleNonFinalBuilds: retriedJobs,\n retriedJobs: retriedJobs,\n skippedJobs: skippedJobs,\n showSkipped: false,\n }\n }\n\n sortedBuilds = () => {\n const { builds } = this.props\n const { visibleNonFinalBuilds, showSkipped } = this.state\n\n return builds.sort((a, b) => {\n // Group builds by job name, then order by decreasing start time; this will ensure retries are together\n if (a.job_name === b.job_name) {\n if (a.start_time < b.start_time) {\n return 1\n }\n if (a.start_time > b.start_time) {\n return -1\n }\n return 0\n }\n if (a.job_name > b.job_name) {\n return 1\n } else {\n return -1\n }\n }).filter((build) => {\n if (build.final || visibleNonFinalBuilds.indexOf(build.job_name) >= 0) {\n if (build.result === 'SKIPPED' && !showSkipped) {\n return false\n }\n return true\n }\n else {\n return false\n }\n })\n }\n\n handleFinalSwitch = isChecked => {\n const { retriedJobs } = this.state\n this.setState({ visibleNonFinalBuilds: (isChecked ? retriedJobs : []) })\n }\n\n handleSkippedSwitch = isChecked => {\n this.setState({ showSkipped: isChecked })\n }\n\n handleToggleVisibleNonFinalBuilds = (jobName) => {\n const { visibleNonFinalBuilds } = this.state\n const index = visibleNonFinalBuilds.indexOf(jobName)\n const newVisible =\n index >= 0 ? [...visibleNonFinalBuilds.slice(0, index), ...visibleNonFinalBuilds.slice(index + 1, visibleNonFinalBuilds.length)] : [...visibleNonFinalBuilds, jobName]\n this.setState({\n visibleNonFinalBuilds: newVisible,\n })\n }\n\n renderRetriesButton = (build, hasRetries) => {\n const { visibleNonFinalBuilds } = this.state\n if (!build.final || !hasRetries) {\n return \n {/* Hide the icon to maintain alignment between final and non-final elements */}\n \n \n }\n const isExpanded = (visibleNonFinalBuilds.indexOf(build.job_name) >= 0)\n const RetryIcon =\n isExpanded\n ? AngleDownIcon\n : AngleRightIcon\n const retryAltText =\n isExpanded\n ? 'Hide retries for this job'\n : 'Show retries for this job'\n // TODO either replace this with an ExpandableSection (but this breaks the layout) or figure out CSS animations for the icon.\n return (\n \n { this.handleToggleVisibleNonFinalBuilds(build.job_name) }}\n title={retryAltText}\n style={{ cursor: 'pointer' }} />\n \n )\n }\n\n render() {\n const { tenant } = this.props\n const { visibleNonFinalBuilds, retriedJobs, skippedJobs, showSkipped } = this.state\n\n let retrySwitch = retriedJobs.length > 0 ?\n \n Show retries  \n \n :\n <>\n\n let skippedSwitch = skippedJobs.length > 0 ?\n \n Show skipped jobs  \n \n :\n <>\n\n const sortedBuilds = this.sortedBuilds()\n\n return (\n \n {skippedSwitch}\n {retrySwitch}\n \n \n {sortedBuilds.map((build) => {\n function linkWrap(cell) {\n return (\n {cell}\n )\n }\n return (\n \n \n = 0),\n \n {linkWrap(\n {build.job_name}\n {!build.voting && ' (non-voting)'}\n )}\n ,\n \n {linkWrap(}\n value={moment\n .duration(build.duration, 'seconds')\n .format('h [hr] m [min] s [sec]')}\n />)}\n ,\n \n {linkWrap()}\n ,\n ]}\n />\n \n \n )\n })}\n \n \n \n )\n }\n}\n\nexport default connect((state) => ({ tenant: state.tenant }))(BuildList)\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { Button, Modal } from '@patternfly/react-core'\n\n\nfunction ChartModal(props) {\n const { chart, isOpen, title, onClose } = props\n\n return (\n Close,\n ]}>\n
    \n {chart}\n
    \n \n )\n}\n\nChartModal.propTypes = {\n chart: PropTypes.object.isRequired,\n isOpen: PropTypes.bool,\n title: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n}\n\nexport { ChartModal }","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n\n\nconst buildResultLegendData = [\n {\n name: 'SUCCESS',\n // PF green-500\n symbol: { fill: '#3E8635' },\n },\n {\n name: 'FAILURE',\n // PF red-100\n symbol: { fill: '#C9190B' },\n },\n {\n name: 'RETRY_LIMIT',\n // PF red-300\n symbol: { fill: '#7D1007' },\n },\n {\n name: 'SKIPPED',\n // PF light-blue-200\n symbol: { fill: '#7CDBF3' },\n },\n {\n name: 'ABORTED',\n // PF gold-200\n symbol: { fill: '#F6D173' },\n },\n {\n name: 'MERGE_CONFLICT',\n // PF orange-200\n symbol: { fill: '#EF9234' },\n },\n {\n name: 'MERGE_FAILURE',\n // PF orange-200\n symbol: { fill: '#EF9234' },\n },\n {\n name: 'NODE_FAILURE',\n // PF orange-300\n symbol: { fill: '#EC7A08' },\n },\n {\n name: 'TIMED_OUT',\n // PF orange-400\n symbol: { fill: '#C46100' },\n },\n {\n name: 'POST_FAILURE',\n // PF orange-500\n symbol: { fill: '#8F4700' },\n },\n {\n name: 'CONFIG_ERROR',\n // PF orange-600\n symbol: { fill: '#773D00' },\n },\n {\n name: 'RETRY',\n // PF orange-100\n symbol: { fill: '#F4B678' },\n },]\n\nconst buildsBarStyleMap = buildResultLegendData.reduce(\n (final, x) => ({ ...final, [x.name]: x.symbol.fill }), {}\n)\n\nconst buildsBarStyle = {\n data: {\n fill: ({ datum }) => buildsBarStyleMap[datum.result]\n }\n}\n\nexport { buildResultLegendData, buildsBarStyleMap, buildsBarStyle }\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\n\nimport * as moment from 'moment'\nimport 'moment-duration-format'\n\nimport { Chart, ChartBar, ChartAxis, ChartLegend, ChartTooltip } from '@patternfly/react-charts'\n\nimport { buildResultLegendData, buildsBarStyle } from './Misc'\n\n\nfunction BuildsetGanttChart(props) {\n const { builds, timezone } = props\n const sortedByStartTime = builds.sort((a, b) => {\n if (a.start_time > b.start_time) {\n return -1\n }\n if (a.start_time < b.start_time) {\n return 1\n }\n return 0\n })\n const origin = moment.utc(sortedByStartTime[builds.length - 1].start_time).tz(timezone)\n\n const longestJobName = builds.reduce((a, build) => (a.length < build.job_name.length ? build.job_name : a), '')\n\n const data = sortedByStartTime.map((build) => {\n return {\n x: build.job_name,\n y0: build.start_time ? (moment.utc(build.start_time).tz(timezone) - origin) / 1000 : 0,\n y: build.end_time ? (moment.utc(build.end_time).tz(timezone) - origin) / 1000 : 0,\n result: build.result,\n started: moment.utc(build.start_time).tz(timezone).format('YYYY-MM-DD HH:mm:ss'),\n ended: moment.utc(build.end_time).tz(timezone).format('YYYY-MM-DD HH:mm:ss'),\n }\n })\n\n const legendData = builds.map((build) => (\n build.result\n )).filter((result, idx, self) => { return self.indexOf(result) === idx }\n ).map((legend) => ({ name: legend }))\n\n const uniqueResults = builds.map(\n (build) => (build.result)\n ).filter((result, idx, self) => {\n return self.indexOf(result) === idx\n })\n\n const chartLegend = buildResultLegendData.filter((legend) => { return uniqueResults.indexOf(legend.name) > -1 })\n\n\n return (\n
    \n }\n\n >\n \n {\n let format\n switch (true) {\n case (t < 180):\n format = 's [sec]'\n break\n case (t < 7200):\n format = 'm [min]'\n break\n default:\n format = 'h [hr] m [min]'\n }\n return moment.duration(t, 'seconds').format(format)\n }}\n fixLabelOverlap={true}\n style={{ tickLabels: { angle: -25, padding: 1, verticalAnchor: 'middle', textAnchor: 'end' } }} />\n }\n labels={({ datum }) => `${datum.result}\\nStarted ${datum.started}\\nEnded ${datum.ended}`}\n />\n \n
    \n )\n\n}\n\nBuildsetGanttChart.propTypes = {\n builds: PropTypes.array.isRequired,\n timezone: PropTypes.string,\n}\n\nexport default connect((state) => ({\n timezone: state.timezone,\n}))(BuildsetGanttChart)","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect, useDispatch } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport {\n Button,\n Flex,\n FlexItem,\n List,\n ListItem,\n Title,\n Modal,\n ModalVariant,\n} from '@patternfly/react-core'\nimport {\n CodeIcon,\n CodeBranchIcon,\n OutlinedCommentDotsIcon,\n CubeIcon,\n FingerprintIcon,\n StreamIcon,\n OutlinedCalendarAltIcon,\n OutlinedClockIcon,\n RedoAltIcon,\n} from '@patternfly/react-icons'\nimport * as moment from 'moment'\nimport 'moment-duration-format'\n\nimport { buildExternalLink, IconProperty } from '../../Misc'\nimport { BuildResultBadge, BuildResultWithIcon } from './Misc'\nimport { enqueue, enqueue_ref } from '../../api'\nimport { addNotification, addApiError } from '../../actions/notifications'\nimport { ChartModal } from '../charts/ChartModal'\nimport BuildsetGanttChart from '../charts/GanttChart'\n\nfunction Buildset({ buildset, timezone, tenant, user }) {\n const buildset_link = buildExternalLink(buildset)\n const [isGanttChartModalOpen, setIsGanttChartModalOpen] = useState(false)\n\n function renderBuildTimes() {\n const firstStartBuild = buildset.builds.reduce((prev, cur) =>\n !cur.start_time || prev.start_time < cur.start_time ? prev : cur\n )\n const lastEndBuild = buildset.builds.reduce((prev, cur) =>\n !cur.end_time || prev.end_time > cur.end_time ? prev : cur\n )\n const totalDuration =\n (moment.utc(lastEndBuild.end_time).tz(timezone) -\n moment.utc(firstStartBuild.start_time).tz(timezone)) /\n 1000\n const overallDuration =\n (moment.utc(lastEndBuild.end_time).tz(timezone) -\n moment.utc(\n buildset.event_timestamp != null\n ? buildset.event_timestamp : firstStartBuild.start_time\n ).tz(timezone)\n ) / 1000\n\n const buildLink = (build) => (\n \n {build.job_name}\n \n )\n const firstStartLink = buildLink(firstStartBuild)\n const lastEndLink = buildLink(lastEndBuild)\n\n return (\n \n \n \n }\n value={\n \n Starting build \n {firstStartLink}
    \n \n (started{' '}\n {moment\n .utc(firstStartBuild.start_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss')}\n )\n \n
    \n Ending build \n {lastEndLink}
    \n \n (ended{' '}\n {moment\n .utc(lastEndBuild.end_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss')}\n )\n \n
    \n }\n />\n }\n value={\n <>\n Buildset duration \n {moment\n .duration(totalDuration, 'seconds')\n .format('h [hr] m [min] s [sec]')}{' '}\n  \n {\n setIsGanttChartModalOpen(true)\n }}\n >\n Show timeline\n \n \n }\n />\n }\n value={\n <>\n Overall duration \n {moment\n .duration(overallDuration, 'seconds')\n .format('h [hr] m [min] s [sec]')}\n \n }\n />\n
    \n
    \n
    \n )\n }\n\n const [showEnqueueModal, setShowEnqueueModal] = useState(false)\n const dispatch = useDispatch()\n\n function renderEnqueueButton() {\n const value = ( {\n event.preventDefault()\n setShowEnqueueModal(true)\n }}\n >\n Re-enqueue buildset\n )\n return (\n }\n value={value}\n />\n )\n }\n\n function enqueueConfirm() {\n setShowEnqueueModal(false)\n if (buildset.change === null) {\n const oldrev = '0000000000000000000000000000000000000000'\n const newrev = buildset.newrev ? buildset.newrev : '0000000000000000000000000000000000000000'\n enqueue_ref(tenant.apiPrefix, buildset.project, buildset.pipeline, buildset.ref, oldrev, newrev)\n .then(() => {\n dispatch(addNotification(\n {\n text: 'Enqueue successful.',\n type: 'success',\n status: '',\n url: '',\n }))\n })\n .catch(error => {\n dispatch(addApiError(error))\n })\n } else {\n const changeId = buildset.change + ',' + buildset.patchset\n enqueue(tenant.apiPrefix, buildset.project, buildset.pipeline, changeId)\n .then(() => {\n dispatch(addNotification(\n {\n text: 'Change queued successfully.',\n type: 'success',\n status: '',\n url: '',\n }))\n })\n .catch(error => {\n dispatch(addApiError(error))\n })\n }\n }\n\n function renderEnqueueModal() {\n let changeId = buildset.change ? buildset.change + ',' + buildset.patchset : buildset.newrev\n let changeInfo = changeId\n ? <>for change {changeId}\n : <>for ref {buildset.ref}\n const title = 'You are about to re-enqueue a change'\n return (\n { setShowEnqueueModal(false) }}\n actions={[\n ,\n ,\n ]}>\n

    Please confirm that you want to re-enqueue all jobs {changeInfo} on project {buildset.project} on pipeline {buildset.pipeline}.

    \n \n )\n }\n\n return (\n <>\n \n <BuildResultWithIcon result={buildset.result} size=\"md\">\n Buildset result\n </BuildResultWithIcon>\n <BuildResultBadge result={buildset.result} />  \n \n {/* We handle the spacing for the body and the flex items by ourselves\n so they go hand in hand. By default, the flex items' spacing only\n affects left/right margin, but not top or bottom (which looks\n awkward when the items are stacked at certain breakpoints) */}\n \n \n \n \n {/* TODO (felix): It would be cool if we could differentiate\n between the SVC system (Github, Gitlab, Gerrit), so we could\n show the respective icon here (GithubIcon, GitlabIcon,\n GitIcon - AFAIK the Gerrit icon is not very popular among\n icon frameworks like fontawesome */}\n {buildset_link && (\n }\n value={buildset_link}\n />\n )}\n {/* TODO (felix): Link to project page in Zuul */}\n }\n value={\n <>\n Project {buildset.project}\n \n }\n />\n }\n value={\n buildset.branch ? (\n <>\n Branch {buildset.branch}\n \n ) : (\n <>\n Ref {buildset.ref}\n \n )\n }\n />\n }\n value={\n <>\n Pipeline {buildset.pipeline}\n \n }\n />\n }\n value={\n \n UUID {buildset.uuid}
    \n Event ID {buildset.event_id}
    \n
    \n }\n />\n
    \n
    \n
    \n {buildset.builds && renderBuildTimes()}\n \n \n \n }\n value={\n <>\n Message:\n
    {buildset.message}
    \n \n }\n />\n {(user.isAdmin && user.scope.indexOf(tenant.name) !== -1) &&\n <>\n {renderEnqueueButton()}\n }\n
    \n
    \n
    \n
    \n }\n isOpen={isGanttChartModalOpen}\n title=\"Builds Timeline\"\n onClose={() => {\n setIsGanttChartModalOpen(false)\n }}\n />\n {renderEnqueueModal()}\n \n )\n}\n\nBuildset.propTypes = {\n buildset: PropTypes.object,\n tenant: PropTypes.object,\n timezone: PropTypes.string,\n user: PropTypes.object,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n timezone: state.timezone,\n user: state.user,\n}))(Buildset)\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {\n EmptyState,\n EmptyStateIcon,\n EmptyStateVariant,\n PageSection,\n PageSectionVariants,\n Title,\n} from '@patternfly/react-core'\nimport { BuildIcon } from '@patternfly/react-icons'\n\nimport { fetchBuildset } from '../actions/build'\nimport { EmptyPage } from '../containers/Errors'\nimport { Fetching } from '../containers/Fetching'\nimport BuildList from '../containers/build/BuildList'\nimport Buildset from '../containers/build/Buildset'\n\nclass BuildsetPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n tenant: PropTypes.object.isRequired,\n buildset: PropTypes.object,\n isFetching: PropTypes.bool.isRequired,\n fetchBuildset: PropTypes.func.isRequired,\n }\n\n updateData = () => {\n if (!this.props.buildset) {\n this.props.fetchBuildset(\n this.props.tenant,\n this.props.match.params.buildsetId\n )\n }\n }\n\n componentDidMount() {\n document.title = 'Zuul Buildset'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render() {\n const { buildset, isFetching, tenant } = this.props\n\n // Initial page load\n if (buildset === undefined || isFetching) {\n return \n }\n\n // Fetching finished, but no buildset found\n if (!buildset) {\n // TODO (felix): Provide some generic error (404?) page. Can we somehow\n // identify the error here?\n return (\n \n )\n }\n\n // Return the build list or an empty state if no builds are part of the\n // buildset.\n const buildsContent = buildset.builds ? (\n \n ) : (\n <>\n {/* Using an hr above the empty state ensures that the space between\n heading (builds) and empty state is filled and the empty state\n doesn't look like it's lost in space. */}\n
    \n \n \n \n This buildset does not contain any builds\n \n \n \n )\n\n return (\n <>\n \n \n \n \n \n <BuildIcon\n style={{\n marginRight: 'var(--pf-global--spacer--sm)',\n verticalAlign: '-0.1em',\n }}\n />{' '}\n Builds\n \n {buildsContent}\n \n \n )\n }\n}\n\nfunction mapStateToProps(state, ownProps) {\n const buildsetId = ownProps.match.params.buildsetId\n // This will be undefined if the data is not available yet or null if no\n // buildset could be fetched for the given id.\n const buildset = state.build.buildsets[buildsetId]\n return {\n buildset,\n tenant: state.tenant,\n isFetching: state.build.isFetching,\n }\n}\n\nconst mapDispatchToProps = { fetchBuildset }\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BuildsetPage)\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n Button,\n Dropdown,\n DropdownItem,\n DropdownPosition,\n DropdownToggle,\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n EmptyStateSecondaryActions,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n BuildIcon,\n CodeBranchIcon,\n CodeIcon,\n CogIcon,\n CubeIcon,\n OutlinedCalendarAltIcon,\n OutlinedClockIcon,\n PollIcon,\n StreamIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n truncate,\n breakWord,\n cellWidth,\n} from '@patternfly/react-table'\nimport 'moment-duration-format'\nimport * as moment from 'moment'\n\nimport { BuildResult, BuildResultWithIcon } from './Misc'\nimport { buildExternalTableLink, IconProperty } from '../../Misc'\n\nfunction BuildsetTable({\n buildsets,\n fetching,\n onClearFilters,\n tenant,\n timezone,\n history,\n}) {\n const [isDurationOpen, setIsDurationOpen] = React.useState(false)\n const [currentDuration, setCurrentDuration] = React.useState(\n 'Buildset Duration'\n )\n\n const handleDurationSelect = (event) => {\n setIsDurationOpen(!isDurationOpen)\n setCurrentDuration(event.target.innerText)\n }\n\n const columns = [\n {\n title: } value=\"Project\" />,\n dataLabel: 'Project',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Branch\" />,\n dataLabel: 'Branch',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Pipeline\" />,\n dataLabel: 'Pipeline',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Change\" />,\n dataLabel: 'Change',\n transforms: [cellWidth(10)],\n cellTransforms: [truncate],\n },\n {\n title: setIsDurationOpen(next)}\n // Use a gear instead of a caret which looks likea sort indicator.\n toggleIndicator={CogIcon}\n style={{\n padding: 0,\n fontWeight: 'var(--pf-c-table--cell-FontWeight)',\n fontSize: 'var(--pf-c-table--cell-FontSize)',\n color: 'var(--pf-c-table--cell-Color)'\n }}\n id=\"toggle-id-duration\"\n >\n {currentDuration}\n \n }\n isOpen={isDurationOpen}\n dropdownItems={[\n Buildset Duration,\n Overall Duration,\n ]}\n style={{ width: '100%', padding: 0 }}\n />,\n dataLabel: 'Duration',\n props: {style: {overflowY: 'visible'}},\n },\n {\n title: (\n } value=\"Start time\" />\n ),\n dataLabel: 'Start time',\n },\n {\n title: } value=\"Result\" />,\n dataLabel: 'Result',\n },\n ]\n\n function createBuildsetRow(buildset) {\n const changeOrRefLink = buildExternalTableLink(buildset)\n\n let duration\n if (currentDuration === 'Buildset Duration') {\n duration = moment.utc(buildset.last_build_end_time) -\n moment.utc(buildset.first_build_start_time)\n } else {\n duration = moment.utc(buildset.last_build_end_time) -\n moment.utc(buildset.event_timestamp)\n }\n\n return {\n // Pass the buildset's uuid as row id, so we can use it later on in the\n // action handler to build the link to the build result page for each row.\n id: buildset.uuid,\n cells: [\n {\n // To allow passing anything else than simple string values to a table\n // cell, we must use the title attribute.\n title: (\n \n {buildset.project}\n \n ),\n },\n {\n title: buildset.branch ? buildset.branch : buildset.ref,\n },\n {\n title: buildset.pipeline,\n },\n {\n title: changeOrRefLink && changeOrRefLink,\n },\n {\n title: moment\n .duration(duration, 'ms')\n .format('h [hr] m [min] s [sec]'),\n },\n {\n title: moment\n .utc(buildset.first_build_start_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss'),\n },\n {\n title: (\n \n \n ),\n },\n ],\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n let rows = []\n // For the fetching row we don't need any actions, so we keep them empty by\n // default.\n let actions = []\n if (fetching) {\n rows = createFetchingRow()\n // The dataLabel property is used to show the column header in a list-like\n // format for smaller viewports. When we are fetching, we don't want the\n // fetching row to be prepended by a \"Project\" column header. The other\n // column headers are not relevant here since we only have a single cell in\n // the fetching row.\n columns[0].dataLabel = ''\n } else {\n rows = buildsets.map((buildset) => createBuildsetRow(buildset))\n // This list of actions will be applied to each row in the table. For\n // row-specific actions we must evaluate the individual row data provided to\n // the onClick handler.\n actions = [\n {\n title: 'Show buildset result',\n onClick: (event, rowId, rowData) =>\n // The row's id contains the buildset's uuid, so we can use it to\n // build the correct link.\n history.push(`${tenant.linkPrefix}/buildset/${rowData.id}`),\n },\n ]\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any buildsets but are also\n not fetching */}\n {!fetching && buildsets.length === 0 && (\n \n \n No buildsets found\n \n No buildsets match this filter criteria. Remove some filters or\n clear all to show results.\n \n \n \n \n \n )}\n \n )\n}\n\nBuildsetTable.propTypes = {\n buildsets: PropTypes.array.isRequired,\n fetching: PropTypes.bool.isRequired,\n onClearFilters: PropTypes.func.isRequired,\n tenant: PropTypes.object.isRequired,\n timezone: PropTypes.string.isRequired,\n history: PropTypes.object.isRequired,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n timezone: state.timezone,\n}))(BuildsetTable)\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { isEqual } from 'lodash'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { PageSection, PageSectionVariants, Pagination } from '@patternfly/react-core'\n\nimport { fetchBuildsets } from '../api'\nimport {\n buildQueryString,\n FilterToolbar,\n getFiltersFromUrl,\n writeFiltersToUrl,\n} from '../containers/FilterToolbar'\nimport BuildsetTable from '../containers/build/BuildsetTable'\n\nclass BuildsetsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n location: PropTypes.object,\n history: PropTypes.object,\n }\n\n constructor(props) {\n super()\n this.filterCategories = [\n {\n key: 'project',\n title: 'Project',\n placeholder: 'Filter by Project...',\n type: 'search',\n },\n {\n key: 'branch',\n title: 'Branch',\n placeholder: 'Filter by Branch...',\n type: 'search',\n },\n {\n key: 'pipeline',\n title: 'Pipeline',\n placeholder: 'Filter by Pipeline...',\n type: 'search',\n },\n {\n key: 'change',\n title: 'Change',\n placeholder: 'Filter by Change...',\n type: 'search',\n },\n {\n key: 'result',\n title: 'Result',\n placeholder: 'Filter by Result...',\n type: 'select',\n // are there more?\n options: [\n 'SUCCESS',\n 'FAILURE',\n 'MERGE_CONFLICT',\n 'MERGE_FAILURE',\n 'DEQUEUED',\n ]\n },\n {\n key: 'uuid',\n title: 'Buildset',\n placeholder: 'Filter by Buildset UUID...',\n type: 'search',\n },\n ]\n\n const _filters = getFiltersFromUrl(props.location, this.filterCategories)\n const perPage = _filters.limit[0]\n ? parseInt(_filters.limit[0])\n : 50\n const currentPage = _filters.skip[0]\n ? Math.floor(parseInt(_filters.skip[0] / perPage)) + 1\n : 1\n\n this.state = {\n buildsets: [],\n fetching: false,\n filters: _filters,\n resultsPerPage: perPage,\n currentPage: currentPage,\n itemCount: null,\n }\n }\n\n updateData = (filters) => {\n // When building the filter query for the API we can't rely on the location\n // search parameters. Although, we've updated them in the updateUrl() method\n // they always have the same value in here (the values when the page was\n // first loaded). Most probably that's the case because the location is\n // passed as prop and doesn't change since the page itself wasn't\n // re-rendered.\n const { itemCount } = this.state\n let paginationOptions = {\n skip: filters.skip.length > 0 ? filters.skip : [0,],\n limit: filters.limit.length > 0 ? filters.limit : [50,]\n }\n let _filters = { ...filters, ...paginationOptions }\n const queryString = buildQueryString(_filters)\n this.setState({ fetching: true })\n fetchBuildsets(this.props.tenant.apiPrefix, queryString).then(\n (response) => {\n // if we have already an itemCount for this query (ie we're scrolling backwards through results)\n // keep this value. Otherwise, check if we've got all the results.\n let finalItemCount = itemCount\n ? itemCount\n : (response.data.length < paginationOptions.limit[0]\n ? parseInt(paginationOptions.skip[0]) + response.data.length\n : null)\n this.setState({\n buildsets: response.data,\n fetching: false,\n itemCount: finalItemCount,\n })\n }\n )\n }\n\n componentDidMount() {\n document.title = 'Zuul Buildsets'\n if (this.props.tenant.name) {\n this.updateData(this.state.filters)\n }\n }\n\n componentDidUpdate(prevProps) {\n const { filters } = this.state\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData(filters)\n }\n }\n\n handleFilterChange = (newFilters) => {\n const { location, history } = this.props\n const { filters, itemCount } = this.state\n /*eslint no-unused-vars: [\"error\", { \"ignoreRestSiblings\": true }]*/\n let { 'skip': x1, 'limit': y1, ..._oldFilters } = filters\n let { 'skip': x2, 'limit': y2, ..._newFilters } = newFilters\n\n // If filters have changed, reinitialize skip\n let equalTest = isEqual(_oldFilters, _newFilters)\n let finalFilters = equalTest ? newFilters : { ...newFilters, skip: [0,] }\n\n // We must update the URL parameters before the state. Otherwise, the URL\n // will always be one filter selection behind the state. But as the URL\n // reflects our state this should be ok.\n\n writeFiltersToUrl(newFilters, location, history)\n let newState = {\n filters: finalFilters,\n // if filters haven't changed besides skip or limit, keep our itemCount and currentPage\n itemCount: equalTest ? itemCount : null,\n }\n if (!equalTest) {\n newState.currentPage = 1\n }\n this.setState(\n newState,\n () => {\n this.updateData(finalFilters)\n })\n }\n\n handleClearFilters = () => {\n // Delete the values for each filter category\n const filters = this.filterCategories.reduce((filterDict, category) => {\n filterDict[category.key] = []\n return filterDict\n }, {})\n this.handleFilterChange(filters)\n }\n\n handlePerPageSelect = (event, perPage) => {\n const { filters } = this.state\n this.setState({ resultsPerPage: perPage })\n const newFilters = { ...filters, limit: [perPage,] }\n this.handleFilterChange(newFilters)\n }\n\n handleSetPage = (event, pageNumber) => {\n const { filters, resultsPerPage } = this.state\n this.setState({ currentPage: pageNumber })\n const offset = resultsPerPage * (pageNumber - 1)\n const newFilters = { ...filters, skip: [offset,] }\n this.handleFilterChange(newFilters)\n }\n\n render() {\n const { history } = this.props\n const { buildsets, fetching, filters, resultsPerPage, currentPage, itemCount } = this.state\n\n return (\n \n \n (\n \n \n {firstIndex} - {lastIndex}\n \n  \n of\n  \n {itemCount ? itemCount : 'many'}\n \n )}\n itemCount={itemCount}\n perPage={resultsPerPage}\n page={currentPage}\n widgetId=\"pagination-menu\"\n onPerPageSelect={this.handlePerPageSelect}\n onSetPage={this.handleSetPage}\n isCompact\n />\n \n \n )\n }\n}\n\nexport default connect((state) => ({ tenant: state.tenant }))(BuildsetsPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n Icon\n} from 'patternfly-react'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchConfigErrorsAction } from '../actions/configErrors'\n\nclass ConfigErrorsPage extends React.Component {\n static propTypes = {\n configErrors: PropTypes.object,\n tenant: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = () => {\n this.props.dispatch(fetchConfigErrorsAction(this.props.tenant))\n }\n\n render () {\n const { configErrors } = this.props\n return (\n \n
    \n {/* Lint warning jsx-a11y/anchor-is-valid */}\n {/* eslint-disable-next-line */}\n {this.updateData()}}>\n refresh  \n \n
    \n
    \n
      \n {configErrors.map((item, idx) => {\n let ctxPath = item.source_context.path\n if (item.source_context.branch !== 'master') {\n ctxPath += ' (' + item.source_context.branch + ')'\n }\n return (\n
    • \n

      {item.source_context.project} - {ctxPath}

      \n

      \n {item.error}\n

      \n
    • \n )\n })}\n
    \n
    \n
    \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n configErrors: state.configErrors.errors\n}))(ConfigErrorsPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\nimport {\n BuildIcon,\n CubeIcon,\n CubesIcon,\n DesktopIcon,\n FolderIcon,\n HomeIcon,\n RepositoryIcon,\n TrendUpIcon,\n ThumbtackIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\nimport { Fetching } from '../containers/Fetching'\nimport { fetchTenantsIfNeeded } from '../actions/tenants'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\nimport { IconProperty } from '../Misc'\n\nclass TenantsPage extends React.Component {\n static propTypes = {\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchTenantsIfNeeded(force))\n }\n\n componentDidMount() {\n document.title = 'Zuul Tenants'\n this.updateData()\n }\n\n // TODO: fix Refreshable class to work with tenant less page.\n componentDidUpdate() { }\n\n render() {\n const { remoteData } = this.props\n if (remoteData.isFetching) {\n return \n }\n\n const tenants = remoteData.tenants.map((tenant) => {\n return {\n cells: [\n { title: ({tenant.name}) },\n { title: (Status) },\n { title: (Projects) },\n { title: (Jobs) },\n { title: (Builds) },\n { title: (Buildsets) },\n { title: (Autoholds) },\n tenant.projects,\n tenant.queue\n ]\n }\n })\n const columns = [\n {\n title: } value=\"Name\" />,\n dataLabel: 'Name',\n },\n {\n title: } value=\"Status\" />,\n dataLabel: 'Status',\n },\n {\n title: } value=\"Projects\" />,\n dataLabel: 'Projects',\n },\n {\n title: } value=\"Jobs\" />,\n dataLabel: 'Jobs',\n },\n {\n title: } value=\"Builds\" />,\n dataLabel: 'Builds',\n },\n {\n title: } value=\"Buildsets\" />,\n dataLabel: 'Buildsets',\n },\n {\n title: } value=\"Autoholds\" />,\n dataLabel: 'Autoholds',\n },\n {\n title: } value=\"Project count\" />,\n dataLabel: 'Project count',\n },\n {\n title: } value=\"Queue\" />,\n dataLabel: 'Queue',\n }\n ]\n\n return (\n \n \n \n \n \n \n )\n }\n}\n\nexport default connect(state => ({ remoteData: state.tenants }))(TenantsPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport Sockette from 'sockette'\nimport {Checkbox, Form, FormGroup, FormControl} from 'patternfly-react'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport 'xterm/css/xterm.css'\nimport { Terminal } from 'xterm'\nimport { FitAddon} from 'xterm-addon-fit'\nimport { WebLinksAddon } from 'xterm-addon-web-links'\nimport { SearchAddon } from 'xterm-addon-search'\n\nimport { getStreamUrl } from '../api'\n\nclass StreamPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n location: PropTypes.object.isRequired,\n tenant: PropTypes.object\n }\n\n state = {\n searchRegex: false,\n searchCaseSensitive: false,\n searchWholeWord: false,\n }\n\n constructor() {\n super()\n this.receiveBuffer = ''\n this.displayRef = React.createRef()\n this.lines = []\n }\n\n componentWillUnmount () {\n if (this.ws) {\n console.log('Remove ws')\n this.ws.close()\n }\n }\n\n onMessage = (message) => {\n this.term.write(message)\n }\n\n onResize = () => {\n this.fitAddon.fit()\n }\n\n componentDidMount() {\n const params = {\n uuid: this.props.match.params.buildId\n }\n const urlParams = new URLSearchParams(this.props.location.search)\n const logfile = urlParams.get('logfile')\n if (logfile) {\n params.logfile = logfile\n }\n document.title = 'Zuul Stream | ' + params.uuid.slice(0, 7)\n\n const term = new Terminal()\n const fitAddon = new FitAddon()\n const webLinksAddon = new WebLinksAddon()\n const searchAddon = new SearchAddon()\n\n term.loadAddon(fitAddon)\n term.loadAddon(webLinksAddon)\n term.loadAddon(searchAddon)\n\n term.setOption('fontSize', 12)\n term.setOption('scrollback', 1000000)\n term.setOption('disableStdin', true)\n term.setOption('convertEol', true)\n\n // Block all keys but page up/down. This needs to be done so ctrl+c can\n // be used to copy text from the terminal.\n term.attachCustomKeyEventHandler(function (e) {\n return e.key === 'PageDown' || e.key === 'PageUp'\n })\n\n term.open(this.terminal)\n fitAddon.fit()\n term.focus()\n\n this.ws = new Sockette(getStreamUrl(this.props.tenant.apiPrefix), {\n timeout: 5e3,\n maxAttempts: 3,\n onopen: () => {\n console.log('onopen')\n this.ws.send(JSON.stringify(params))\n },\n onmessage: e => {\n this.onMessage(e.data)\n },\n onreconnect: e => {\n console.log('Reconnecting...', e)\n },\n onmaximum: e => {\n console.log('Stop Attempting!', e)\n },\n onclose: e => {\n console.log('onclose', e)\n this.onMessage('\\n--- END OF STREAM ---\\n')\n },\n onerror: e => {\n console.log('onerror:', e)\n }\n })\n\n this.term = term\n this.searchAddon = searchAddon\n this.fitAddon = fitAddon\n\n term.element.style.padding = '5px'\n this.onResize()\n window.addEventListener('resize', this.onResize)\n }\n\n handleCheckBoxRegex = (e) => {\n this.setState({searchRegex: e.target.checked})\n }\n\n handleCheckBoxCaseSensitive = (e) => {\n this.setState({searchCaseSensitive: e.target.checked})\n }\n\n handleCheckBoxWholeWord = (e) => {\n this.setState({searchWholeWord: e.target.checked})\n }\n\n getSearchOptions = () => {\n return {\n regex: this.state.searchRegex,\n wholeWord: this.state.searchWholeWord,\n caseSensitive: this.state.searchCaseSensitive,\n }\n }\n\n handleKeyPress = (e) => {\n const searchOptions = this.getSearchOptions()\n searchOptions.incremental = e.key !== 'Enter'\n if (e.key === 'Enter') {\n // Don't reload the page on enter\n e.preventDefault()\n }\n if (e.key === 'Enter' && e.shiftKey) {\n this.searchAddon.findPrevious(e.target.value, searchOptions)\n } else {\n this.searchAddon.findNext(e.target.value, searchOptions)\n }\n }\n\n render () {\n return (\n \n
    \n \n \n   Use regex: \n \n \n   Case sensitive: \n \n \n   Whole word: \n \n \n \n
    \n
    this.terminal = ref} />\n \n )\n }\n}\n\n\nexport default connect(state => ({tenant: state.tenant}))(StreamPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport SwaggerUi from 'swagger-ui'\nimport 'swagger-ui/dist/swagger-ui.css'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchOpenApiIfNeeded } from '../actions/openapi'\n\n\nclass OpenApiPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchOpenApiIfNeeded(force))\n }\n\n componentDidMount () {\n document.title = 'Zuul API'\n this.updateData()\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.remoteData.openapi &&\n this.props.remoteData.openapi !== prevProps.remoteData.openapi) {\n SwaggerUi({\n dom_id: '#swaggerContainer',\n spec: this.props.remoteData.openapi,\n presets: [SwaggerUi.presets.apis]\n })\n }\n }\n\n render() {\n return (\n \n
    \n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.openapi,\n}))(OpenApiPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport ComponentsPage from './pages/Components'\nimport FreezeJobPage from './pages/FreezeJob'\nimport StatusPage from './pages/Status'\nimport ChangeStatusPage from './pages/ChangeStatus'\nimport ProjectPage from './pages/Project'\nimport ProjectsPage from './pages/Projects'\nimport JobPage from './pages/Job'\nimport JobsPage from './pages/Jobs'\nimport LabelsPage from './pages/Labels'\nimport NodesPage from './pages/Nodes'\nimport SemaphorePage from './pages/Semaphore'\nimport SemaphoresPage from './pages/Semaphores'\nimport AutoholdsPage from './pages/Autoholds'\nimport AutoholdPage from './pages/Autohold'\nimport BuildPage from './pages/Build'\nimport BuildsPage from './pages/Builds'\nimport BuildsetPage from './pages/Buildset'\nimport BuildsetsPage from './pages/Buildsets'\nimport ConfigErrorsPage from './pages/ConfigErrors'\nimport TenantsPage from './pages/Tenants'\nimport StreamPage from './pages/Stream'\nimport OpenApiPage from './pages/OpenApi'\n\n// The Route object are created in the App component.\n// Object with a title are created in the menu.\n// Object with globalRoute are not tenant scoped.\n// Remember to update the api getHomepageUrl subDir list for route with params\nconst routes = () => [\n {\n title: 'Status',\n to: '/status',\n component: StatusPage\n },\n {\n title: 'Projects',\n to: '/projects',\n component: ProjectsPage\n },\n {\n title: 'Jobs',\n to: '/jobs',\n component: JobsPage\n },\n {\n title: 'Labels',\n to: '/labels',\n component: LabelsPage\n },\n {\n title: 'Nodes',\n to: '/nodes',\n component: NodesPage\n },\n {\n title: 'Autoholds',\n to: '/autoholds',\n component: AutoholdsPage\n },\n {\n title: 'Semaphores',\n to: '/semaphores',\n component: SemaphoresPage\n },\n {\n title: 'Builds',\n to: '/builds',\n component: BuildsPage\n },\n {\n title: 'Buildsets',\n to: '/buildsets',\n component: BuildsetsPage\n },\n {\n to: '/freeze-job',\n component: FreezeJobPage\n },\n {\n to: '/status/change/:changeId',\n component: ChangeStatusPage\n },\n {\n to: '/stream/:buildId',\n component: StreamPage\n },\n {\n to: '/project/:projectName*',\n component: ProjectPage\n },\n {\n to: '/job/:jobName',\n component: JobPage\n },\n {\n to: '/build/:buildId',\n component: BuildPage,\n props: { 'activeTab': 'results' },\n },\n {\n to: '/build/:buildId/artifacts',\n component: BuildPage,\n props: { 'activeTab': 'artifacts' },\n },\n {\n to: '/build/:buildId/logs',\n component: BuildPage,\n props: { 'activeTab': 'logs' },\n },\n {\n to: '/build/:buildId/console',\n component: BuildPage,\n props: { 'activeTab': 'console' },\n },\n {\n to: '/build/:buildId/log/:file*',\n component: BuildPage,\n props: { 'activeTab': 'logs', 'logfile': true },\n },\n {\n to: '/buildset/:buildsetId',\n component: BuildsetPage\n },\n {\n to: '/autohold/:requestId',\n component: AutoholdPage\n },\n {\n to: '/semaphore/:semaphoreName',\n component: SemaphorePage\n },\n {\n to: '/config-errors',\n component: ConfigErrorsPage,\n },\n {\n to: '/tenants',\n component: TenantsPage,\n globalRoute: true\n },\n {\n to: '/openapi',\n component: OpenApiPage,\n noTenantPrefix: true,\n },\n {\n to: '/components',\n component: ComponentsPage,\n noTenantPrefix: true,\n },\n // auth_callback is handled in App.jsx\n]\n\nexport { routes }\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { useHistory } from 'react-router-dom'\nimport {\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n FingerprintIcon,\n} from '@patternfly/react-icons'\n\n// Several pages use the location hash in a way that would be\n// difficult to disentangle from the OIDC callback parameters. This\n// dedicated callback page accepts the OIDC params and then internally\n// redirects to the page we saved before redirecting to the IDP.\n\nfunction AuthCallbackPage(props) {\n const history = useHistory()\n const { user } = props\n\n useEffect(() => {\n if (user.redirect) {\n history.push(user.redirect)\n }\n }, [history, user])\n\n return (\n <>\n \n \n Login in progress\n \n

    \n You will be redirected shortly...\n

    \n \n
    \n
    \n \n )\n}\n\nAuthCallbackPage.propTypes = {\n user: PropTypes.object,\n}\n\nexport default connect((state) => ({\n user: state.user,\n}))(AuthCallbackPage)\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport {\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n Title,\n} from '@patternfly/react-core'\nimport {\n LockIcon,\n} from '@patternfly/react-icons'\n\nfunction AuthRequiredPage() {\n return (\n <>\n \n \n Unauthorized\n \n

    \n Authorization is required.\n

    \n
    \n
    \n \n )\n}\n\n\nexport default AuthRequiredPage\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// The App is the parent component of every pages. Each page content is\n// rendered by the Route object according to the current location.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { matchPath, withRouter } from 'react-router'\nimport { Link, NavLink, Redirect, Route, Switch } from 'react-router-dom'\nimport { connect } from 'react-redux'\nimport { withAuth } from 'oidc-react'\nimport {\n TimedToastNotification,\n ToastNotificationList,\n} from 'patternfly-react'\nimport * as moment from 'moment'\nimport {\n Brand,\n Button,\n ButtonVariant,\n Dropdown,\n DropdownItem,\n DropdownToggle,\n DropdownSeparator,\n KebabToggle,\n Modal,\n Nav,\n NavItem,\n NavList,\n NotificationBadge,\n NotificationDrawer,\n NotificationDrawerBody,\n NotificationDrawerList,\n NotificationDrawerListItem,\n NotificationDrawerListItemBody,\n NotificationDrawerListItemHeader,\n Page,\n PageHeader,\n PageHeaderTools,\n PageHeaderToolsGroup,\n PageHeaderToolsItem,\n} from '@patternfly/react-core'\n\nimport {\n BellIcon,\n BookIcon,\n ChevronDownIcon,\n CodeIcon,\n ServiceIcon,\n UsersIcon,\n} from '@patternfly/react-icons'\n\nimport AuthContainer from './containers/auth/Auth'\nimport ErrorBoundary from './containers/ErrorBoundary'\nimport { Fetching } from './containers/Fetching'\nimport SelectTz from './containers/timezone/SelectTz'\nimport ConfigModal from './containers/config/Config'\nimport logo from './images/logo.svg'\nimport { clearNotification } from './actions/notifications'\nimport { fetchConfigErrorsAction, clearConfigErrorsAction } from './actions/configErrors'\nimport { fetchTenantsIfNeeded } from './actions/tenants'\nimport { routes } from './routes'\nimport { setTenantAction } from './actions/tenant'\nimport { configureAuthFromTenant, configureAuthFromInfo } from './actions/auth'\nimport { getHomepageUrl } from './api'\nimport AuthCallbackPage from './pages/AuthCallback'\nimport AuthRequiredPage from './pages/AuthRequired'\n\nclass App extends React.Component {\n static propTypes = {\n notifications: PropTypes.array,\n configErrors: PropTypes.array,\n configErrorsReady: PropTypes.bool,\n info: PropTypes.object,\n tenant: PropTypes.object,\n tenants: PropTypes.object,\n timezone: PropTypes.string,\n location: PropTypes.object,\n history: PropTypes.object,\n dispatch: PropTypes.func,\n isKebabDropdownOpen: PropTypes.bool,\n user: PropTypes.object,\n auth: PropTypes.object,\n signIn: PropTypes.func,\n }\n\n state = {\n showErrors: false,\n isTenantDropdownOpen: false,\n }\n\n renderMenu() {\n const { tenant } = this.props\n if (tenant.name) {\n return (\n \n )\n } else {\n // Return an empty navigation bar in case we don't have an active tenant\n return