From 04a07db988cf799fb438e60d91db721d527cae52 Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Wed, 12 Jul 2017 17:08:34 +0200 Subject: [PATCH 01/13] add os-admin service --- app/front/scripts/services/admin.js | 358 ++++++++++++++++++++++++++++ 1 file changed, 358 insertions(+) create mode 100644 app/front/scripts/services/admin.js diff --git a/app/front/scripts/services/admin.js b/app/front/scripts/services/admin.js new file mode 100644 index 0000000..da29ffe --- /dev/null +++ b/app/front/scripts/services/admin.js @@ -0,0 +1,358 @@ +'use strict'; + +/* global window */ + +var _ = require('lodash'); +var url = require('url'); +var downloader = require('./downloader'); +var Promise = require('bluebird'); + +module.exports.defaultSettingsUrl = 'config.json'; +module.exports.conductorUrl = 'https://next.openspending.org'; +module.exports.publishUrl = module.exports.conductorUrl + '/package/publish'; +module.exports.searchUrl = module.exports.conductorUrl + '/search/package'; +module.exports.pollInterval = 1000; + +var RemoteProcessingStatus = { + 'queued': 'Waiting in queue for an available processor', + 'initializing': 'Getting ready to load the package', + 'loading-datapackage': 'Reading the Fiscal Data Package', + 'validating-datapackage': 'Validagin Data Package correctness', + 'loading-resource': 'Loading Resource data', + 'deleting-table': 'Clearing previous rows for this dataset from the database', + 'creating-table': 'Preparing space for rows in the database', + 'loading-data-ready': 'Starting to load rows to database', + 'loading-data': 'Loading data into the database', + 'creating-babbage-model': 'Converting the Data Package into an API model', + 'saving-metadata': 'Saving package metadata', + 'done': 'Done', + 'fail': 'Failed' +}; + +function getSettings(settingsUrl) { + return Promise.resolve(window.globalConfig || {}); +} + +function updateUserProfile(authToken, profileData) { + var url = module.exports.conductorUrl + '/user/update'; + + profileData = _.pick(profileData || {}, [ + 'username' + ]); + + var data = _.chain(profileData) + .map(function(value, key) { + return encodeURIComponent(key) + '=' + encodeURIComponent(value); + }) + .push('jwt=' + encodeURIComponent(authToken)) + .join('&') + .value(); + + var options = { + method: 'POST' + }; + return downloader.getJson(url + '?' + data, options, true) + .then(function(result) { + if (!result.success) { + throw new Error(result.error); + } + return profileData; + }); +} + +function getDataPackageMetadata(dataPackage) { + var originUrl = dataPackage.origin_url || dataPackage.__origin_url || [ + '//datastore.openspending.org', + dataPackage.package.owner, + dataPackage.package.name, + 'datapackage.json' + ].join('/'); + originUrl = originUrl.replace(/^http:/, 'https:'); + + var totalCountOfRecords = (function(dataPackage) { + var result = 0; + + _.each(dataPackage.resources, function(resource) { + var count = parseInt(resource.count_of_rows, 10) || 0; + if (count > 0) { + result += count; + } + }); + if (result == 0) { + var count = parseInt(dataPackage.count_of_rows, 10) || 0; + if (count > 0) { + result = count; + } + } + + return result; + })(dataPackage.package); + + var totalSizeOfResources = _.chain(dataPackage.package.resources) + .map(function(resource) { + var result = parseInt(resource.bytes, 10) || 0; + return result > 0 ? result : 0; + }) + .sum() + .value(); + + return { + id: dataPackage.id, + name: dataPackage.package.name, + title: dataPackage.package.title, + description: dataPackage.package.description, + owner: dataPackage.package.owner, + isPublished: !dataPackage.package.private, + last_update: dataPackage.last_update ? dataPackage.last_update * 1000 : 0, + totalCountOfResources: _.get(dataPackage, 'package.resources.length', 0), + totalCountOfRecords: totalCountOfRecords, + totalSizeOfResources: totalSizeOfResources, + loadingStatus: (function() { + // Old packages will have no `loaded`/`loading_*` properties; + // treat them as successfully loaded. + + var isLoaded = _.isUndefined(dataPackage.loaded) ? true : + !!dataPackage.loaded; + + var loadingStatus = isLoaded ? 'done' : + (dataPackage.loaging_status || 'queued'); + + var isFailed = loadingStatus == 'fail'; + + var result = { + loaded: isLoaded, + failed: isFailed, + status: loadingStatus, + message: RemoteProcessingStatus[loadingStatus] || + RemoteProcessingStatus.queued, + error: isFailed ? dataPackage.loading_error : null + }; + + // Show UI message for failed and in-progress packages + result.showMessage = !result.loaded; + + // Calculate count of rows (if available) + result.countOfRecords = totalCountOfRecords; + result.processedRecords = 0; + + return result; + })(), + author: _.chain(dataPackage.package.author) + .split(' ') + .dropRight(1) + .join(' ') + .value(), + url: originUrl, + resources: _.chain(dataPackage.package.resources) + .map(function(resource) { + var resourceUrl = null; + if (resource.url) { + resourceUrl = resource.url; + } + if (resource.path) { + resourceUrl = url.resolve(originUrl, resource.path); + } + + if (resourceUrl) { + return { + name: resource.name, + url: resourceUrl + }; + } + }) + .filter() + .value() + }; +} + +function getDataPackageLoadingStatus(dataPackage) { + var url = module.exports.conductorUrl + '/package/status' + + '?datapackage=' + encodeURIComponent(dataPackage.url); + + return fetch(url) + .then(function(response) { + if (response.status != 200) { + throw new Error('Failed to load data from ' + response.url); + } + return response.json(); + }) + .then(function(response) { + if (!_.isObject(response)) { + throw new Error('Response should be an object'); + } + var responseStatus = ('' + response.status).toLowerCase(); + if (responseStatus == 'fail') { + throw new Error(response.error); // Go to .catch() + } else { + var progress = parseInt(response.progress, 10) || 0; + if (progress < 0) { + progress = 0; + } + return { + status: responseStatus, + progress: progress + }; + } + }); +} + +function pollPackageStatus(dataPackage, dataPackageUpdatedCallback) { + if (_.isObject(dataPackage.loadingStatus)) { + var status = dataPackage.loadingStatus; + // If package was not loaded and there is no error - it's still loading + if (!status.loaded && !status.error) { + dataPackage.loadingStatus.showMessage = true; + dataPackage.loadingStatus.processedRecords = 0; + var poll = function() { + getDataPackageLoadingStatus(dataPackage) + .then(function(result) { + var loadingStatus = dataPackage.loadingStatus; + + loadingStatus.loaded = result.status == 'done'; + loadingStatus.failed = false; + loadingStatus.status = result.status; + loadingStatus.message = RemoteProcessingStatus[result.status]; + loadingStatus.error = null; + loadingStatus.processedRecords = result.progress; + + if (loadingStatus.processedRecords > loadingStatus.countOfRecords) { + if (loadingStatus.countOfRecords > 0) { + loadingStatus.processedRecords = loadingStatus.countOfRecords; + } + } + + if (_.isFunction(dataPackageUpdatedCallback)) { + dataPackageUpdatedCallback(dataPackage); + } + + if (result.status != 'done') { + setTimeout(poll, module.exports.pollInterval); + } else { + loadingStatus.processedRecords = loadingStatus.countOfRecords; + } + }) + .catch(function(error) { + var loadingStatus = dataPackage.loadingStatus; + + loadingStatus.loaded = false; + loadingStatus.failed = true; + loadingStatus.status = 'fail'; + loadingStatus.message = RemoteProcessingStatus.fail; + loadingStatus.error = error.message; + + if (_.isFunction(dataPackageUpdatedCallback)) { + dataPackageUpdatedCallback(dataPackage); + } + }); + }; + poll(); + } + } + return dataPackage; +} + +function getDataPackages(authToken, userid, dataPackageUpdatedCallback) { + var url = module.exports.searchUrl + '?size=10000'; + if (authToken) { + url += '&jwt=' + encodeURIComponent(authToken); + } + if (userid) { + url += '&package.owner=' + encodeURIComponent(JSON.stringify(userid)); + } + return downloader.getJson(url).then(function(packages) { + return _.chain(packages) + .map(getDataPackageMetadata) + .map(function(dataPackage) { + return pollPackageStatus(dataPackage, dataPackageUpdatedCallback); + }) + .sortBy(function(item) { + return item.title; + }) + .value(); + }); +} + +function togglePackagePublicationStatus(permissionToken, dataPackage) { + var url = module.exports.conductorUrl + '/package/publish'; + + var data = _.chain({ + jwt: permissionToken, + id: dataPackage.id, + publish: 'toggle' + }) + .map(function(value, key) { + return encodeURIComponent(key) + '=' + encodeURIComponent(value); + }) + .join('&') + .value(); + + var options = { + method: 'POST' + }; + return downloader.getJson(url + '?' + data, options, true) + .then(function(result) { + if (!result.success) { + throw new Error(result.error); + } + dataPackage.isPublished = !!result.published; + return dataPackage; + }); +} + +function deletePackage(permissionToken, dataPackage) { + var url = module.exports.conductorUrl + '/package/delete'; + + var data = _.chain({ + jwt: permissionToken, + id: dataPackage.id + }) + .map(function(value, key) { + return encodeURIComponent(key) + '=' + encodeURIComponent(value); + }) + .join('&') + .value(); + + var options = { + method: 'POST' + }; + return downloader.getJson(url + '?' + data, options, true) + .then(function(result) { + if (!result.success) { + throw new Error(result.error); + } + return dataPackage; + }); +} + + +function runWebHooks(permissionToken, dataPackage) { + var url = module.exports.conductorUrl + '/package/run-hooks'; + + var data = _.chain({ + jwt: permissionToken, + id: dataPackage.id + }) + .map(function(value, key) { + return encodeURIComponent(key) + '=' + encodeURIComponent(value); + }) + .join('&') + .value(); + + var options = { + method: 'POST' + }; + return downloader.getJson(url + '?' + data, options, true) + .then(function(result) { + if (!result.success) { + throw new Error(result.error); + } + return dataPackage; + }); +} + +module.exports.getSettings = getSettings; +module.exports.updateUserProfile = updateUserProfile; +module.exports.getDataPackages = getDataPackages; +module.exports.togglePackagePublicationStatus = togglePackagePublicationStatus; +module.exports.deletePackage = deletePackage; +module.exports.runWebHooks = runWebHooks; From 308be55ff48e6bfddd93d67661303a2c4fbc9cea Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Wed, 12 Jul 2017 17:08:49 +0200 Subject: [PATCH 02/13] add downloader service --- app/front/scripts/services/downloader.js | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 app/front/scripts/services/downloader.js diff --git a/app/front/scripts/services/downloader.js b/app/front/scripts/services/downloader.js new file mode 100644 index 0000000..0d69329 --- /dev/null +++ b/app/front/scripts/services/downloader.js @@ -0,0 +1,33 @@ +'use strict'; + +require('isomorphic-fetch'); +var Promise = require('bluebird'); + +var cache = {}; + +module.exports = { + get: function(url, options, bypassCache) { + if (bypassCache || !cache[url]) { + var requestPromise = fetch(url, options).then(function(response) { + if (response.status != 200) { + throw new Error('Failed loading data from ' + response.url); + } + return response.text(); + }); + + if (bypassCache) { + return requestPromise; + } + cache[url] = requestPromise; + } + return new Promise(function(resolve, reject) { + cache[url].then(resolve).catch(reject); + }); + }, + getJson: function(url, options, bypassCache) { + return this.get(url, options, bypassCache).then(JSON.parse); + }, + clearCache: function() { + cache = {}; + } +}; From d7054d940fe1c3da5c544cf327c7f83fa1b6eead Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Wed, 12 Jul 2017 17:09:24 +0200 Subject: [PATCH 03/13] save and export the authentication token in the login service --- app/front/scripts/services/login.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/front/scripts/services/login.js b/app/front/scripts/services/login.js index 6df8f38..ca0a02f 100644 --- a/app/front/scripts/services/login.js +++ b/app/front/scripts/services/login.js @@ -53,6 +53,7 @@ angular.module('Application') check.then(function(response) { attempting = false; token = response.token; + that.authToken = token; that.isLoggedIn = true; that.name = response.profile.name; that.email = response.profile.email; From e64377f0f17dbf50305bbf8eb527da4b6b8a1105 Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Wed, 12 Jul 2017 17:10:14 +0200 Subject: [PATCH 04/13] add button to execute the webhooks of a data package after it has been complete submitted --- app/views/partials/steps/download-package.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/views/partials/steps/download-package.html b/app/views/partials/steps/download-package.html index 6d52d02..4a68b24 100644 --- a/app/views/partials/steps/download-package.html +++ b/app/views/partials/steps/download-package.html @@ -103,6 +103,12 @@

Publishing status:

Manage your datasets + + + + Send to OpenBudgets + {% endraw %} From 465d5042ede929311b34b73dbe966d37a7e9a6c3 Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Wed, 12 Jul 2017 17:10:52 +0200 Subject: [PATCH 05/13] add runWebHooks function to the download-package.js file --- .../scripts/controllers/download-package.js | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/app/front/scripts/controllers/download-package.js b/app/front/scripts/controllers/download-package.js index 3b3c9d0..8c99329 100644 --- a/app/front/scripts/controllers/download-package.js +++ b/app/front/scripts/controllers/download-package.js @@ -1,4 +1,5 @@ 'use strict'; +var osAdminService = require('../services/admin'); angular.module('Application') .controller('DownloadPackageController', [ @@ -16,6 +17,37 @@ angular.module('Application') $scope.login = LoginService; $scope.publishDataPackage = DownloadPackageService.publishDataPackage; $scope.state = DownloadPackageService.getState(true); + LoginService.check(); }); + + $scope.runWebHooks = function(packageId) { + // query data packages to extract the user's "owner id" + osAdminService.getDataPackages(LoginService.authToken, LoginService.userId).then(function (packages) { + console.log(packages); + var ownerId = packages[0].owner; + var dataPackageId = ownerId + ":" + packageId; + + // set the data package status to "published" (a.k.a. public) + osAdminService.togglePackagePublicationStatus(LoginService.permissionToken, {id: dataPackageId}).then( + function (res) { + // run web hooks for the package + console.log(res); + var dataPackage = _.find(packages, {id: dataPackageId}); + console.log(dataPackage); + + if (dataPackage) { + dataPackage.isRunningWebhooks = true; + var token = LoginService.permissionToken; + osAdminService.runWebHooks(token, dataPackage).then(function() { + dataPackage.isRunningWebhooks = false; + }); + } + } + ); + }, + function (err) { + console.log(err); + }); + }; } ]); From 6dcb33a8c568d99b3148ba1f0e321663c042bf12 Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Mon, 17 Jul 2017 15:54:16 +0200 Subject: [PATCH 06/13] (download-package service) encapsulate the publishDataPackage return value in a promise to be able to know when it finishes --- app/front/scripts/services/download-package.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/front/scripts/services/download-package.js b/app/front/scripts/services/download-package.js index cc50390..ad66bbb 100644 --- a/app/front/scripts/services/download-package.js +++ b/app/front/scripts/services/download-package.js @@ -81,11 +81,12 @@ angular.module('Application') }; result.publishDataPackage = function() { - state.packagePublicUrl = null; - state.isUploading = true; - PackageService.publish().then(function(files) { - state.uploads = files; - files.$promise + return $q(function (resolve, reject) { + state.packagePublicUrl = null; + state.isUploading = true; + PackageService.publish().then(function(files) { + state.uploads = files; + files.$promise .then(function() { var packageName = PackageService.getAttributes().name; var owner = LoginService.userId; @@ -98,9 +99,11 @@ angular.module('Application') }) .finally(function() { state.isUploading = false; + resolve(true); }); + return state; + }); }); - return state; }; return result; From 6be59d662e26862e3b18ee377befacd5aab389c1 Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Mon, 17 Jul 2017 15:55:10 +0200 Subject: [PATCH 07/13] (os-admin service) send the response from the webhook endpoint back to the client of the service --- app/front/scripts/services/admin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/front/scripts/services/admin.js b/app/front/scripts/services/admin.js index da29ffe..40dc901 100644 --- a/app/front/scripts/services/admin.js +++ b/app/front/scripts/services/admin.js @@ -346,7 +346,7 @@ function runWebHooks(permissionToken, dataPackage) { if (!result.success) { throw new Error(result.error); } - return dataPackage; + return result; }); } From fc4baf3f466183fa20db370d1202451e69a619e3 Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Mon, 17 Jul 2017 15:55:59 +0200 Subject: [PATCH 08/13] (download-package html) remove button to execute webhooks and add messages for "in process" and "ready", regarding the status changes of the fdp2rdf pipeline execution --- app/views/partials/steps/download-package.html | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/app/views/partials/steps/download-package.html b/app/views/partials/steps/download-package.html index 4a68b24..bd753d6 100644 --- a/app/views/partials/steps/download-package.html +++ b/app/views/partials/steps/download-package.html @@ -55,7 +55,7 @@

Column Mapping

+
+ + Your dataset is being submitted to OpenBudgets. Please wait, we will notify you right here when it is ready. +
+ +
+ + Your dataset is ready in the OpenBudgets Platform! You can go there now! +
+ Explore and visualize your data now! @@ -103,12 +113,6 @@

Publishing status:

Manage your datasets
- - - - Send to OpenBudgets - {% endraw %} From 3f6e937fc534da65c1f01a78dcaf4b4d2b6b12f1 Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Mon, 17 Jul 2017 15:57:30 +0200 Subject: [PATCH 09/13] (download-package controller) poll the fdp2rdf API to update the interface as soon as the dataset is fully loaded into the OpenBudgets platform --- .../scripts/controllers/download-package.js | 44 +++++++++++++++---- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/app/front/scripts/controllers/download-package.js b/app/front/scripts/controllers/download-package.js index 8c99329..4702901 100644 --- a/app/front/scripts/controllers/download-package.js +++ b/app/front/scripts/controllers/download-package.js @@ -4,9 +4,9 @@ var osAdminService = require('../services/admin'); angular.module('Application') .controller('DownloadPackageController', [ '$scope', 'PackageService', 'DownloadPackageService', - 'Configuration', 'ApplicationLoader', 'LoginService', + 'Configuration', 'ApplicationLoader', 'LoginService', '$interval', '$http', function($scope, PackageService, DownloadPackageService, - Configuration, ApplicationLoader, LoginService) { + Configuration, ApplicationLoader, LoginService, $interval, $http) { ApplicationLoader.then(function() { $scope.fileName = Configuration.defaultPackageFileName; $scope.attributes = PackageService.getAttributes(); @@ -17,10 +17,18 @@ angular.module('Application') $scope.login = LoginService; $scope.publishDataPackage = DownloadPackageService.publishDataPackage; $scope.state = DownloadPackageService.getState(true); - LoginService.check(); + $scope.packageOBEUStatus = null; }); - $scope.runWebHooks = function(packageId) { + $scope.publishAndRunWebHooks = function () { + $scope.publishDataPackage().finally(function (res) { + runWebHooks($scope.fiscalDataPackage.name); + }); + }; + + + function runWebHooks(packageId) { + $scope.packageOBEUStatus = 'processing'; // query data packages to extract the user's "owner id" osAdminService.getDataPackages(LoginService.authToken, LoginService.userId).then(function (packages) { console.log(packages); @@ -31,15 +39,16 @@ angular.module('Application') osAdminService.togglePackagePublicationStatus(LoginService.permissionToken, {id: dataPackageId}).then( function (res) { // run web hooks for the package - console.log(res); var dataPackage = _.find(packages, {id: dataPackageId}); - console.log(dataPackage); if (dataPackage) { - dataPackage.isRunningWebhooks = true; var token = LoginService.permissionToken; - osAdminService.runWebHooks(token, dataPackage).then(function() { - dataPackage.isRunningWebhooks = false; + osAdminService.runWebHooks(token, dataPackage).then(function(res) { + var iri = JSON.parse(res.response).iri; + var executionId = iri.substr(1 + iri.lastIndexOf('/'), iri.length); + var executionOverviewUrl = + 'http://apps.openbudgets.eu/linkedpipes/test/resources/executions/' + executionId + '/overview'; + pollPipelineUntilReady(executionOverviewUrl); }); } } @@ -49,5 +58,22 @@ angular.module('Application') console.log(err); }); }; + + function pollPipelineUntilReady(executionOverviewUrl) { + stop = $interval(function () { + $http.get('https://crossorigin.me/' + executionOverviewUrl, {withCredentials: false}).then( + function (res) { + console.log(res); + if (res.data.status['@id'].includes('finished')) { + $interval.cancel(stop); + $scope.packageOBEUStatus = 'ready'; + } + }, + function (err) { + console.log(err); + } + ); + }, 3000); + } } ]); From 138120fd29dfca2becb18022f520c8051135b121 Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Wed, 19 Jul 2017 17:18:52 +0200 Subject: [PATCH 10/13] (download-package controller and html) add button to open new tab at OBEU indigo so the user can look for his data package, or show him the os-viewer if the package is already listed in indigo --- .../scripts/controllers/download-package.js | 27 +++++++++++++++++-- .../partials/steps/download-package.html | 9 +++++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/app/front/scripts/controllers/download-package.js b/app/front/scripts/controllers/download-package.js index 4702901..81b28c5 100644 --- a/app/front/scripts/controllers/download-package.js +++ b/app/front/scripts/controllers/download-package.js @@ -4,9 +4,10 @@ var osAdminService = require('../services/admin'); angular.module('Application') .controller('DownloadPackageController', [ '$scope', 'PackageService', 'DownloadPackageService', - 'Configuration', 'ApplicationLoader', 'LoginService', '$interval', '$http', + 'Configuration', 'ApplicationLoader', 'LoginService', '$interval', '$http', '$window', function($scope, PackageService, DownloadPackageService, - Configuration, ApplicationLoader, LoginService, $interval, $http) { + Configuration, ApplicationLoader, LoginService, $interval, $http, $window) { + ApplicationLoader.then(function() { $scope.fileName = Configuration.defaultPackageFileName; $scope.attributes = PackageService.getAttributes(); @@ -18,8 +19,10 @@ angular.module('Application') $scope.publishDataPackage = DownloadPackageService.publishDataPackage; $scope.state = DownloadPackageService.getState(true); $scope.packageOBEUStatus = null; + $scope.obeuUrl = 'http://apps.openbudgets.eu' }); + $scope.publishAndRunWebHooks = function () { $scope.publishDataPackage().finally(function (res) { runWebHooks($scope.fiscalDataPackage.name); @@ -27,6 +30,26 @@ angular.module('Application') }; + $scope.redirectToViewer = function() { + console.log('querying'); + var url = $scope.obeuUrl + '/search/package?q=' + encodeURIComponent($scope.fiscalDataPackage.name) + '&size=1'; + $http.get(url, {withCredentials: false}).then( + function (res) { + console.log('good'); + var packageId = ''; + if (res.length > 0) { + packageId = res[0].name; + } + $window.open($scope.obeuUrl + '/' + packageId, '_blank'); + }, + function (err) { + console.log(err); + $window.open($scope.obeuUrl, '_blank'); + } + ) + }; + + function runWebHooks(packageId) { $scope.packageOBEUStatus = 'processing'; // query data packages to extract the user's "owner id" diff --git a/app/views/partials/steps/download-package.html b/app/views/partials/steps/download-package.html index bd753d6..b5d83f4 100644 --- a/app/views/partials/steps/download-package.html +++ b/app/views/partials/steps/download-package.html @@ -105,10 +105,15 @@

Publishing status:

- Explore and visualize your data now! + Visualize your data in OpenSpending - + + Search your datapackage in OpenBudgets + + + Manage your datasets From d7e9dfda3fc82eba1ca751636da5992b0754700e Mon Sep 17 00:00:00 2001 From: Jean Piero Hernandez Meze Date: Mon, 7 Aug 2017 16:06:35 +0200 Subject: [PATCH 11/13] fix: update OS domain by removing the preceding 'next.' --- app/config/index.js | 2 +- app/front/scripts/services/admin.js | 2 +- app/services/os-datastore.js | 2 +- app/services/package.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/config/index.js b/app/config/index.js index c291745..987b0ad 100644 --- a/app/config/index.js +++ b/app/config/index.js @@ -3,7 +3,7 @@ var path = require('path'); var nconf = require('nconf'); -const DEFAULT_HOST = 'https://next.openspending.org'; +const DEFAULT_HOST = 'https://openspending.org'; const DEFAULT_BASE_PATH = ''; nconf.file({ diff --git a/app/front/scripts/services/admin.js b/app/front/scripts/services/admin.js index 40dc901..c810eab 100644 --- a/app/front/scripts/services/admin.js +++ b/app/front/scripts/services/admin.js @@ -8,7 +8,7 @@ var downloader = require('./downloader'); var Promise = require('bluebird'); module.exports.defaultSettingsUrl = 'config.json'; -module.exports.conductorUrl = 'https://next.openspending.org'; +module.exports.conductorUrl = 'https://openspending.org'; module.exports.publishUrl = module.exports.conductorUrl + '/package/publish'; module.exports.searchUrl = module.exports.conductorUrl + '/search/package'; module.exports.pollInterval = 1000; diff --git a/app/services/os-datastore.js b/app/services/os-datastore.js index 591c625..d272607 100644 --- a/app/services/os-datastore.js +++ b/app/services/os-datastore.js @@ -8,7 +8,7 @@ var utils = require('./utils'); require('isomorphic-fetch'); var OS_CONDUCTOR = process.env.OS_PACKAGER_CONDUCTOR_HOST || - 'https://next.openspending.org'; + 'https://openspending.org'; var defaultOptions = { conductorUrl: OS_CONDUCTOR + '/datastore/', conductorInfoUrl: OS_CONDUCTOR + '/datastore/info', diff --git a/app/services/package.js b/app/services/package.js index 002d0c6..fd304a1 100644 --- a/app/services/package.js +++ b/app/services/package.js @@ -10,7 +10,7 @@ var datastore = require('./os-datastore'); require('isomorphic-fetch'); var defaultOptions = { - adapterUrl: 'https://next.openspending.org/fdp-adapter/convert' + adapterUrl: 'https://openspending.org/fdp-adapter/convert' }; module.exports.defaultOptions = defaultOptions; From 78083342ce73f3c009b72ea479425ecd9457c86f Mon Sep 17 00:00:00 2001 From: Yakun Li Date: Tue, 10 Apr 2018 10:54:56 +0200 Subject: [PATCH 12/13] add fdp2rdf endpoint url --- app/front/scripts/services/admin.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/front/scripts/services/admin.js b/app/front/scripts/services/admin.js index c810eab..b6266d7 100644 --- a/app/front/scripts/services/admin.js +++ b/app/front/scripts/services/admin.js @@ -330,7 +330,8 @@ function runWebHooks(permissionToken, dataPackage) { var data = _.chain({ jwt: permissionToken, - id: dataPackage.id + id: dataPackage.id, + pipeline: 'http://eis-openbudgets.iais.fraunhofer.de/linkedpipes/execute/fdp2rdf' }) .map(function(value, key) { return encodeURIComponent(key) + '=' + encodeURIComponent(value); From 4dd6b9dc1bca2529d43136cbcb6c268c9d05713d Mon Sep 17 00:00:00 2001 From: Yakun Li Date: Fri, 11 May 2018 13:41:53 +0200 Subject: [PATCH 13/13] Update admin.js --- app/front/scripts/services/admin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/front/scripts/services/admin.js b/app/front/scripts/services/admin.js index b6266d7..f979d64 100644 --- a/app/front/scripts/services/admin.js +++ b/app/front/scripts/services/admin.js @@ -331,7 +331,7 @@ function runWebHooks(permissionToken, dataPackage) { var data = _.chain({ jwt: permissionToken, id: dataPackage.id, - pipeline: 'http://eis-openbudgets.iais.fraunhofer.de/linkedpipes/execute/fdp2rdf' + pipeline: 'https://apps.openbudgets.eu/linkedpipes/execute/fdp2rdf' }) .map(function(value, key) { return encodeURIComponent(key) + '=' + encodeURIComponent(value);