1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-23 15:29:42 +02:00

refactor(router): show endpoint id in url (#3966)

* refactor(module): provide basic endpoint id url

* fix(stacks): fix route to include endpointId

* fix(stacks): fix stacks urls

* fix(sidebar): fix urls to docker routes

* refactor(app): set endpoint id on change view

* refactor(dashboard): revert to old version

* refactor(sidebar): revert file

* feat(app): wip load endpoint on route change

* feat(home): show error

* feat(app): load endpoint route

* feat(sidebar): show endpoint per provider

* refactor(app): revert

* refactor(app): clean endpoint startup

* feat(edge): check for edge k8s

* refactor(endpoints): move all modules under endpoint route

* refactor(stacks): move stacks route to docker

* refactor(templates): move templates route to docker

* refactor(app): check endpoint when entering docker module

* fix(app): load endpoint when entering endpoints modules

* feat(azure): check endpoint

* feat(kubernetes): check endpoint

* feat(home): show loading state when loading edge

* style(app): revert small changes

* refactor(sidebar): remove refernce to endpointId

* fix(stacks): fix stacks route

* style(docker): sort routes

* feat(app): change route to home if endpoint failed

* fix(services): guard against empty snapshots

* feat(app): show error when failed to load endpoint

* feat(app): reload home route when failing

* refactor(router): replace resolvers with onEnter
This commit is contained in:
Chaim Lev-Ari 2020-07-14 23:46:38 +03:00 committed by GitHub
parent 1b3e2c8f69
commit 3c34fbd8f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 245 additions and 316 deletions

View file

@ -5,19 +5,53 @@ angular.module('portainer.docker', ['portainer.app']).config([
var docker = {
name: 'docker',
parent: 'root',
parent: 'endpoint',
abstract: true,
resolve: {
endpointID: [
'EndpointProvider',
'$state',
function (EndpointProvider, $state) {
var id = EndpointProvider.endpointID();
if (!id) {
return $state.go('portainer.home');
/* ngInject */
async onEnter(endpoint, $state, EndpointService, EndpointProvider, LegacyExtensionManager, Notifications, StateManager, SystemService) {
try {
const status = await checkEndpointStatus(endpoint);
if (endpoint.Type !== 4) {
await updateEndpointStatus(endpoint, status);
}
endpoint.Status = status;
if (status === 2) {
if (!endpoint.Snapshots[0]) {
throw new Error('Endpoint is unreachable and there is no snapshot available for offline browsing.');
}
},
],
if (endpoint.Snapshots[0].Swarm) {
throw new Error('Endpoint is unreachable. Connect to another swarm manager.');
}
}
EndpointProvider.setEndpointID(endpoint.Id);
EndpointProvider.setEndpointPublicURL(endpoint.PublicURL);
EndpointProvider.setOfflineModeFromStatus(endpoint.Status);
const extensions = await LegacyExtensionManager.initEndpointExtensions(endpoint);
await StateManager.updateEndpointState(endpoint, extensions);
} catch (e) {
Notifications.error('Failed loading endpoint', e);
$state.go('portainer.home', {}, { reload: true });
}
async function checkEndpointStatus(endpoint) {
try {
await SystemService.ping(endpoint.Id);
return 1;
} catch (e) {
return 2;
}
}
async function updateEndpointStatus(endpoint, status) {
if (endpoint.Status === status) {
return;
}
await EndpointService.updateEndpoint(endpoint.Id, { Status: status });
}
},
};
@ -144,6 +178,43 @@ angular.module('portainer.docker', ['portainer.app']).config([
},
};
const customTemplates = {
name: 'portainer.templates.custom',
url: '/custom',
views: {
'content@': {
component: 'customTemplatesView',
},
},
};
const customTemplatesNew = {
name: 'portainer.templates.custom.new',
url: '/new?fileContent&type',
views: {
'content@': {
component: 'createCustomTemplateView',
},
},
params: {
fileContent: '',
type: '',
},
};
const customTemplatesEdit = {
name: 'portainer.templates.custom.edit',
url: '/:id',
views: {
'content@': {
component: 'editCustomTemplateView',
},
},
};
var dashboard = {
name: 'docker.dashboard',
url: '/dashboard',
@ -366,6 +437,39 @@ angular.module('portainer.docker', ['portainer.app']).config([
},
};
var stacks = {
name: 'docker.stacks',
url: '/stacks',
views: {
'content@': {
templateUrl: '~Portainer/views/stacks/stacks.html',
controller: 'StacksController',
},
},
};
var stack = {
name: 'docker.stacks.stack',
url: '/:name?id&type&external',
views: {
'content@': {
templateUrl: '~Portainer/views/stacks/edit/stack.html',
controller: 'StackController',
},
},
};
var stackCreation = {
name: 'docker.stacks.newstack',
url: '/newstack',
views: {
'content@': {
templateUrl: '~Portainer/views/stacks/create/createstack.html',
controller: 'CreateStackController',
},
},
};
var swarm = {
name: 'docker.swarm',
url: '/swarm',
@ -416,6 +520,17 @@ angular.module('portainer.docker', ['portainer.app']).config([
},
};
var templates = {
name: 'docker.templates',
url: '/templates',
views: {
'content@': {
templateUrl: '~Portainer/views/templates/templates.html',
controller: 'TemplatesController',
},
},
};
var volumes = {
name: 'docker.volumes',
url: '/volumes',
@ -471,6 +586,9 @@ angular.module('portainer.docker', ['portainer.app']).config([
$stateRegistryProvider.register(containerInspect);
$stateRegistryProvider.register(containerLogs);
$stateRegistryProvider.register(containerStats);
$stateRegistryProvider.register(customTemplates);
$stateRegistryProvider.register(customTemplatesNew);
$stateRegistryProvider.register(customTemplatesEdit);
$stateRegistryProvider.register(docker);
$stateRegistryProvider.register(dashboard);
$stateRegistryProvider.register(host);
@ -493,11 +611,15 @@ angular.module('portainer.docker', ['portainer.app']).config([
$stateRegistryProvider.register(service);
$stateRegistryProvider.register(serviceCreation);
$stateRegistryProvider.register(serviceLogs);
$stateRegistryProvider.register(stacks);
$stateRegistryProvider.register(stack);
$stateRegistryProvider.register(stackCreation);
$stateRegistryProvider.register(swarm);
$stateRegistryProvider.register(swarmVisualizer);
$stateRegistryProvider.register(tasks);
$stateRegistryProvider.register(task);
$stateRegistryProvider.register(taskLogs);
$stateRegistryProvider.register(templates);
$stateRegistryProvider.register(volumes);
$stateRegistryProvider.register(volume);
$stateRegistryProvider.register(volumeBrowse);