diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-04 12:09:00 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-04 12:09:00 +0000 |
commit | 88a0824944720b6edaaef56376713541b9a02118 (patch) | |
tree | f5fcc4f9755f249779cda9a8f02902d734af6e7e /app/assets/javascripts/jobs | |
parent | 7d19df2d34a9803d9f077c16315ba919b7ae2aa2 (diff) | |
download | gitlab-ce-88a0824944720b6edaaef56376713541b9a02118.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/jobs')
-rw-r--r-- | app/assets/javascripts/jobs/components/job_app.vue | 35 | ||||
-rw-r--r-- | app/assets/javascripts/jobs/index.js | 7 | ||||
-rw-r--r-- | app/assets/javascripts/jobs/store/actions.js | 39 | ||||
-rw-r--r-- | app/assets/javascripts/jobs/store/mutation_types.js | 2 | ||||
-rw-r--r-- | app/assets/javascripts/jobs/store/mutations.js | 9 | ||||
-rw-r--r-- | app/assets/javascripts/jobs/store/state.js | 1 |
6 files changed, 46 insertions, 47 deletions
diff --git a/app/assets/javascripts/jobs/components/job_app.vue b/app/assets/javascripts/jobs/components/job_app.vue index 809b3d5f57e..0ca13e897f3 100644 --- a/app/assets/javascripts/jobs/components/job_app.vue +++ b/app/assets/javascripts/jobs/components/job_app.vue @@ -8,7 +8,6 @@ import { polyfillSticky } from '~/lib/utils/sticky'; import CiHeader from '~/vue_shared/components/header_ci_component.vue'; import Callout from '~/vue_shared/components/callout.vue'; import Icon from '~/vue_shared/components/icon.vue'; -import createStore from '../store'; import EmptyState from './empty_state.vue'; import EnvironmentsBlock from './environments_block.vue'; import ErasedBlock from './erased_block.vue'; @@ -22,7 +21,6 @@ import { isNewJobLogActive } from '../store/utils'; export default { name: 'JobPageApp', - store: createStore(), components: { CiHeader, Callout, @@ -60,27 +58,15 @@ export default { required: false, default: null, }, - endpoint: { - type: String, - required: true, - }, terminalPath: { type: String, required: false, default: null, }, - pagePath: { - type: String, - required: true, - }, projectPath: { type: String, required: true, }, - logState: { - type: String, - required: true, - }, subscriptionsMoreMinutesUrl: { type: String, required: false, @@ -161,37 +147,28 @@ export default { created() { this.throttled = _.throttle(this.toggleScrollButtons, 100); - this.setJobEndpoint(this.endpoint); - this.setTraceOptions({ - logState: this.logState, - pagePath: this.pagePath, - }); - - this.fetchJob(); - this.fetchTrace(); - window.addEventListener('resize', this.onResize); window.addEventListener('scroll', this.updateScroll); }, mounted() { this.updateSidebar(); }, - destroyed() { + beforeDestroy() { + this.stopPollingTrace(); + this.stopPolling(); window.removeEventListener('resize', this.onResize); window.removeEventListener('scroll', this.updateScroll); }, methods: { ...mapActions([ - 'setJobEndpoint', - 'setTraceOptions', - 'fetchJob', 'fetchJobsForStage', 'hideSidebar', 'showSidebar', 'toggleSidebar', - 'fetchTrace', 'scrollBottom', 'scrollTop', + 'stopPollingTrace', + 'stopPolling', 'toggleScrollButtons', 'toggleScrollAnimation', ]), @@ -223,7 +200,7 @@ export default { <div> <gl-loading-icon v-if="isLoading" - :size="2" + size="lg" class="js-job-loading qa-loading-animation prepend-top-20" /> diff --git a/app/assets/javascripts/jobs/index.js b/app/assets/javascripts/jobs/index.js index 9c35534523e..024a13ce102 100644 --- a/app/assets/javascripts/jobs/index.js +++ b/app/assets/javascripts/jobs/index.js @@ -1,11 +1,18 @@ import Vue from 'vue'; import JobApp from './components/job_app.vue'; +import createStore from './store'; export default () => { const element = document.getElementById('js-job-vue-app'); + const store = createStore(); + + // Let's start initializing the store (i.e. fetching data) right away + store.dispatch('init', element.dataset); + return new Vue({ el: element, + store, components: { JobApp, }, diff --git a/app/assets/javascripts/jobs/store/actions.js b/app/assets/javascripts/jobs/store/actions.js index 41cc5a181dc..f4030939f2c 100644 --- a/app/assets/javascripts/jobs/store/actions.js +++ b/app/assets/javascripts/jobs/store/actions.js @@ -14,6 +14,16 @@ import { scrollUp, } from '~/lib/utils/scroll_utils'; +export const init = ({ dispatch }, { endpoint, logState, pagePath }) => { + dispatch('setJobEndpoint', endpoint); + dispatch('setTraceOptions', { + logState, + pagePath, + }); + + return Promise.all([dispatch('fetchJob'), dispatch('fetchTrace')]); +}; + export const setJobEndpoint = ({ commit }, endpoint) => commit(types.SET_JOB_ENDPOINT, endpoint); export const setTraceOptions = ({ commit }, options) => commit(types.SET_TRACE_OPTIONS, options); @@ -147,7 +157,6 @@ export const toggleScrollisInBottom = ({ commit }, toggle) => { export const requestTrace = ({ commit }) => commit(types.REQUEST_TRACE); -let traceTimeout; export const fetchTrace = ({ dispatch, state }) => axios .get(`${state.traceEndpoint}/trace.json`, { @@ -157,24 +166,32 @@ export const fetchTrace = ({ dispatch, state }) => dispatch('toggleScrollisInBottom', isScrolledToBottom()); dispatch('receiveTraceSuccess', data); - if (!data.complete) { - traceTimeout = setTimeout(() => { - dispatch('fetchTrace'); - }, 4000); - } else { + if (data.complete) { dispatch('stopPollingTrace'); + } else if (!state.traceTimeout) { + dispatch('startPollingTrace'); } }) .catch(() => dispatch('receiveTraceError')); -export const stopPollingTrace = ({ commit }) => { +export const startPollingTrace = ({ dispatch, commit }) => { + const traceTimeout = setTimeout(() => { + commit(types.SET_TRACE_TIMEOUT, 0); + dispatch('fetchTrace'); + }, 4000); + + commit(types.SET_TRACE_TIMEOUT, traceTimeout); +}; + +export const stopPollingTrace = ({ state, commit }) => { + clearTimeout(state.traceTimeout); + commit(types.SET_TRACE_TIMEOUT, 0); commit(types.STOP_POLLING_TRACE); - clearTimeout(traceTimeout); }; + export const receiveTraceSuccess = ({ commit }, log) => commit(types.RECEIVE_TRACE_SUCCESS, log); -export const receiveTraceError = ({ commit }) => { - commit(types.RECEIVE_TRACE_ERROR); - clearTimeout(traceTimeout); +export const receiveTraceError = ({ dispatch }) => { + dispatch('stopPollingTrace'); flash(__('An error occurred while fetching the job log.')); }; /** diff --git a/app/assets/javascripts/jobs/store/mutation_types.js b/app/assets/javascripts/jobs/store/mutation_types.js index 858fa3b73ab..6c4f1b5a191 100644 --- a/app/assets/javascripts/jobs/store/mutation_types.js +++ b/app/assets/javascripts/jobs/store/mutation_types.js @@ -10,7 +10,6 @@ export const DISABLE_SCROLL_BOTTOM = 'DISABLE_SCROLL_BOTTOM'; export const DISABLE_SCROLL_TOP = 'DISABLE_SCROLL_TOP'; export const ENABLE_SCROLL_BOTTOM = 'ENABLE_SCROLL_BOTTOM'; export const ENABLE_SCROLL_TOP = 'ENABLE_SCROLL_TOP'; -// TODO export const TOGGLE_SCROLL_ANIMATION = 'TOGGLE_SCROLL_ANIMATION'; export const TOGGLE_IS_SCROLL_IN_BOTTOM_BEFORE_UPDATING_TRACE = 'TOGGLE_IS_SCROLL_IN_BOTTOM'; @@ -20,6 +19,7 @@ export const RECEIVE_JOB_SUCCESS = 'RECEIVE_JOB_SUCCESS'; export const RECEIVE_JOB_ERROR = 'RECEIVE_JOB_ERROR'; export const REQUEST_TRACE = 'REQUEST_TRACE'; +export const SET_TRACE_TIMEOUT = 'SET_TRACE_TIMEOUT'; export const STOP_POLLING_TRACE = 'STOP_POLLING_TRACE'; export const RECEIVE_TRACE_SUCCESS = 'RECEIVE_TRACE_SUCCESS'; export const RECEIVE_TRACE_ERROR = 'RECEIVE_TRACE_ERROR'; diff --git a/app/assets/javascripts/jobs/store/mutations.js b/app/assets/javascripts/jobs/store/mutations.js index 77c68cac4a6..6193d8d34ab 100644 --- a/app/assets/javascripts/jobs/store/mutations.js +++ b/app/assets/javascripts/jobs/store/mutations.js @@ -53,17 +53,14 @@ export default { state.isTraceComplete = log.complete || state.isTraceComplete; }, - /** - * Will remove loading animation - */ - [types.STOP_POLLING_TRACE](state) { - state.isTraceComplete = true; + [types.SET_TRACE_TIMEOUT](state, id) { + state.traceTimeout = id; }, /** * Will remove loading animation */ - [types.RECEIVE_TRACE_ERROR](state) { + [types.STOP_POLLING_TRACE](state) { state.isTraceComplete = true; }, diff --git a/app/assets/javascripts/jobs/store/state.js b/app/assets/javascripts/jobs/store/state.js index cdc1780f3d6..5a61828ec6d 100644 --- a/app/assets/javascripts/jobs/store/state.js +++ b/app/assets/javascripts/jobs/store/state.js @@ -22,6 +22,7 @@ export default () => ({ isTraceComplete: false, traceSize: 0, isTraceSizeVisible: false, + traceTimeout: 0, // used as a query parameter to fetch the trace traceState: null, |