Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a7fd7d67b3 | ||
|
|
96c360e728 | ||
|
|
3e3f06c55d | ||
|
|
1745aaaa0a | ||
|
|
c67ed7d7d2 | ||
|
|
f6d8f9f5c5 | ||
|
|
a4c12555cb | ||
|
|
8d1868305d | ||
|
|
2cdee919c1 | ||
|
|
3f8c36789f | ||
|
|
631a08189a | ||
|
|
4808df5e95 | ||
|
|
4585597388 | ||
|
|
8f73956d1e | ||
|
|
8f2bda2309 | ||
|
|
9dde195af4 | ||
|
|
9468c80a78 | ||
|
|
1fecf70123 | ||
|
|
a11f42b3e0 | ||
|
|
683528b81c | ||
|
|
02b0f35442 | ||
|
|
1a5e60c44f | ||
|
|
a16e3523bd | ||
|
|
50c930f5fa | ||
|
|
9cdcad7a88 | ||
|
|
59f5c0d955 | ||
|
|
64e6700228 | ||
|
|
7414394ceb | ||
|
|
8b62cd1f04 | ||
|
|
239e3bb6f1 | ||
|
|
b283c0ba18 | ||
|
|
e59471d87d | ||
|
|
6bebce7015 | ||
|
|
eb65ab6b4b | ||
|
|
3a69d50458 | ||
|
|
9c45a62b53 | ||
|
|
ed59584fe4 | ||
|
|
bf7de8e7a5 | ||
|
|
9c745db413 | ||
|
|
7d0ed90796 | ||
|
|
b0681f55e9 | ||
|
|
86b30b3c83 | ||
|
|
b92e2fcfc9 | ||
|
|
b1f6664292 | ||
|
|
cb635f6706 | ||
|
|
e46468321d | ||
|
|
4ad2fbf7bb | ||
|
|
64e1e004ae | ||
|
|
524626b895 | ||
|
|
b804f7db03 | ||
|
|
d4657dcd32 | ||
|
|
f905dc07cf | ||
|
|
76dd163f0e | ||
|
|
659009c1de | ||
|
|
35fb3bb38f | ||
|
|
6da3a07bc0 | ||
|
|
65da59c7f6 | ||
|
|
c16837538e | ||
|
|
3e0d8d1920 | ||
|
|
b743b21840 | ||
|
|
36eea6bdda | ||
|
|
45adff6087 | ||
|
|
837e3e5e83 | ||
|
|
23869cd61f | ||
|
|
e95eb14651 | ||
|
|
2556771c32 | ||
|
|
1b9d219988 | ||
|
|
ceb29547e2 | ||
|
|
95f63f6af8 | ||
|
|
74f7fee8b5 | ||
|
|
d90b2621da | ||
|
|
93bc1f3c57 | ||
|
|
41ceda01d0 | ||
|
|
e8f0454b39 | ||
|
|
f97e294c80 | ||
|
|
4e3783c544 | ||
|
|
2adca6bbc4 | ||
|
|
7e1e068370 | ||
|
|
99c7a50fd6 | ||
|
|
3297546e0a | ||
|
|
48336fd7f4 | ||
|
|
fbf7b4aec3 | ||
|
|
db7d72cca8 | ||
|
|
3381516013 | ||
|
|
628e609e6a | ||
|
|
5c1493bd7e | ||
|
|
725726f083 | ||
|
|
ea3203f466 | ||
|
|
f615ef30f9 | ||
|
|
fd1f71587f | ||
|
|
e1c5a06bf0 | ||
|
|
3bc373fff0 | ||
|
|
20bc17eb6f | ||
|
|
4a17ad312f |
No files matched your search
@@ -64,11 +64,15 @@ boto3 1.20.54
|
||||
botocore 1.23.54 Apache License 2.0 https://github.com/boto/botocore
|
||||
urllib3 1.26.9 MIT https://urllib3.readthedocs.io/
|
||||
Werkzeug 2.0.3 BSD-3-Clause https://palletsprojects.com/p/werkzeug/
|
||||
azure-mgmt-rdbms 10.1.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-mgmt-resource 21.0.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-mgmt-subscription 3.0.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-identity 1.9.0 MIT License https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity
|
||||
|
||||
NOTE: This report was generated using Python 3.10. Full information may not be
|
||||
shown for Python modules that are not required with this version.
|
||||
|
||||
41 dependencies listed.
|
||||
45 dependencies listed.
|
||||
|
||||
Javascript Dependencies
|
||||
=======================
|
||||
@@ -119,8 +123,8 @@ Name Version
|
||||
@babel/plugin-transform-react-pure-annotations 7.16.7 MIT https://github.com/babel/babel.git
|
||||
@babel/preset-react 7.13.13 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.16.0 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.17.8 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.17.0 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.17.8 MIT https://github.com/babel/babel.git
|
||||
@babel/template 7.16.7 MIT https://github.com/babel/babel.git
|
||||
@babel/template 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/traverse 7.17.0 MIT https://github.com/babel/babel.git
|
||||
@@ -129,17 +133,14 @@ Name Version
|
||||
@babel/types 7.15.4 MIT https://github.com/babel/babel.git
|
||||
@date-io/core 1.3.13 MIT https://github.com/dmtrKovalenko/date-io
|
||||
@date-io/date-fns 1.3.13 MIT https://github.com/dmtrKovalenko/date-io
|
||||
@emotion/cache 11.7.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/cache
|
||||
@emotion/cache 11.5.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/cache
|
||||
@emotion/hash 0.8.0 MIT https://github.com/emotion-js/emotion/tree/master/packages/hash
|
||||
@emotion/is-prop-valid 1.1.2 MIT https://github.com/emotion-js/emotion/tree/main/packages/is-prop-valid
|
||||
@emotion/is-prop-valid 0.8.8 MIT https://github.com/emotion-js/emotion/tree/master/packages/is-prop-valid
|
||||
@emotion/memoize 0.7.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/memoize
|
||||
@emotion/memoize 0.7.4 MIT https://github.com/emotion-js/emotion/tree/master/packages/memoize
|
||||
@emotion/react 11.5.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/react
|
||||
@emotion/serialize 1.0.2 MIT https://github.com/emotion-js/emotion/tree/main/packages/serialize
|
||||
@emotion/sheet 1.0.3 MIT https://github.com/emotion-js/emotion/tree/main/packages/sheet
|
||||
@emotion/sheet 1.1.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/sheet
|
||||
@emotion/stylis 0.8.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/stylis
|
||||
@emotion/unitless 0.7.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/unitless
|
||||
@emotion/utils 1.0.0 MIT https://github.com/emotion-js/emotion/tree/master/packages/utils
|
||||
@@ -153,18 +154,9 @@ Name Version
|
||||
@material-ui/system 4.12.1 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/types 5.1.0 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/utils 4.11.2 MIT https://github.com/mui-org/material-ui.git
|
||||
@mui/base 5.0.0-alpha.74 MIT https://github.com/mui/material-ui.git
|
||||
@mui/icons-material 5.5.1 MIT https://github.com/mui/material-ui.git
|
||||
@mui/material 5.5.3 MIT https://github.com/mui/material-ui.git
|
||||
@mui/private-theming 5.5.3 MIT https://github.com/mui/material-ui.git
|
||||
@mui/styled-engine 5.5.2 MIT https://github.com/mui/material-ui.git
|
||||
@mui/system 5.5.3 MIT https://github.com/mui/material-ui.git
|
||||
@mui/types 7.1.3 MIT https://github.com/mui/material-ui.git
|
||||
@mui/utils 5.5.3 MIT https://github.com/mui/material-ui.git
|
||||
@nodelib/fs.scandir 2.1.5 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir
|
||||
@nodelib/fs.stat 2.0.5 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat
|
||||
@nodelib/fs.walk 1.2.8 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk
|
||||
@popperjs/core 2.11.4 MIT https://github.com/popperjs/popper-core.git
|
||||
@popperjs/core 2.10.2 MIT https://github.com/popperjs/popper-core.git
|
||||
@projectstorm/geometry 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-canvas-core 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@@ -187,9 +179,7 @@ Name Version
|
||||
@types/react 16.14.10 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react 16.14.20 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react-dom 16.9.14 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react-is 17.0.3 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react-transition-group 4.4.1 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react-transition-group 4.4.4 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/scheduler 0.16.2 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/styled-jsx 2.2.9 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
ajv 8.9.0 MIT https://github.com/ajv-validator/ajv.git
|
||||
@@ -205,6 +195,7 @@ aspen-core 1.0.5
|
||||
aspen-decorations 1.1.1 MIT git+https://github.com/neeksandhu/aspen-decorations.git
|
||||
aspen-tree-model 1.0.5 MIT git+https://github.com/neeksandhu/aspen-tree-model.git
|
||||
async 2.6.4 MIT https://github.com/caolan/async.git
|
||||
attr-accept 2.2.2 MIT https://github.com/react-dropzone/attr-accept.git
|
||||
axios 0.21.4 MIT https://github.com/axios/axios.git
|
||||
babel-plugin-styled-components 1.13.3 MIT https://github.com/styled-components/babel-plugin-styled-components.git
|
||||
babel-plugin-syntax-jsx 6.18.0 MIT https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-jsx
|
||||
@@ -236,21 +227,20 @@ camelcase-keys 7.0.2
|
||||
camelize 1.0.0 MIT git://github.com/substack/camelize.git
|
||||
caniuse-api 3.0.0 MIT https://github.com/nyalab/caniuse-api.git
|
||||
chalk 2.4.2 MIT https://github.com/chalk/chalk.git
|
||||
chart.js 2.9.4 MIT https://github.com/chartjs/Chart.js.git
|
||||
chartjs-color 2.4.1 MIT https://github.com/chartjs/chartjs-color.git
|
||||
chartjs-color-string 0.6.0 MIT https://github.com/chartjs/chartjs-color-string.git
|
||||
chart.js 3.8.0 MIT https://github.com/chartjs/Chart.js.git
|
||||
chartjs-plugin-zoom 1.2.1 MIT https://github.com/chartjs/chartjs-plugin-zoom.git
|
||||
classnames 2.3.1 MIT https://github.com/JedWatson/classnames.git
|
||||
closest 0.0.1 MIT https://github.com/ForbesLindesay/closest.git
|
||||
clsx 1.1.1 MIT https://github.com/lukeed/clsx.git
|
||||
codemirror 5.63.3 MIT https://github.com/codemirror/CodeMirror.git
|
||||
color-convert 1.9.3 MIT https://github.com/Qix-/color-convert.git
|
||||
color-name 1.1.3 MIT git@github.com:dfcreative/color-name.git
|
||||
color-name 1.1.4 MIT git@github.com:colorjs/color-name.git
|
||||
colord 2.9.1 MIT https://github.com/omgovich/colord.git
|
||||
commander 7.2.0 MIT https://github.com/tj/commander.js.git
|
||||
concat-map 0.0.1 MIT git://github.com/substack/node-concat-map.git
|
||||
context-menu 2.0.0 MIT https://github.com/chipto/context-menu.git
|
||||
convert-source-map 1.8.0 MIT git://github.com/thlorenz/convert-source-map.git
|
||||
convert-units 2.3.4 MIT git://github.com/ben-ng/convert-units.git
|
||||
core-js 3.19.1 MIT https://github.com/zloirock/core-js.git
|
||||
css-color-names 1.0.1 MIT git://github.com/bahamas10/css-color-names.git
|
||||
css-line-break 2.0.1 MIT git+ssh://git@github.com/niklasvh/css-line-break.git
|
||||
@@ -265,11 +255,9 @@ cssnano-utils 2.0.1
|
||||
csso 4.2.0 MIT https://github.com/css/csso.git
|
||||
csstype 2.6.18 MIT https://github.com/frenic/csstype
|
||||
csstype 3.0.9 MIT https://github.com/frenic/csstype
|
||||
csstype 3.0.11 MIT https://github.com/frenic/csstype
|
||||
dagre 0.8.5 MIT https://github.com/dagrejs/dagre.git
|
||||
date-fns 2.25.0 MIT https://github.com/date-fns/date-fns
|
||||
debug 4.3.2 MIT git://github.com/visionmedia/debug.git
|
||||
debug 4.3.3 MIT git://github.com/debug-js/debug.git
|
||||
debug 4.3.4 MIT git://github.com/debug-js/debug.git
|
||||
decamelize 5.0.1 MIT https://github.com/sindresorhus/decamelize.git
|
||||
decamelize 1.2.0 MIT https://github.com/sindresorhus/decamelize.git
|
||||
decamelize-keys 1.1.0 MIT https://github.com/dsblv/decamelize-keys.git
|
||||
@@ -279,7 +267,6 @@ dir-glob 3.0.1
|
||||
dom-align 1.12.2 MIT git@github.com:yiminghe/dom-align.git
|
||||
dom-helpers 5.2.1 MIT git+https://github.com/react-bootstrap/dom-helpers.git
|
||||
dom-serializer 1.3.2 MIT git://github.com/cheeriojs/dom-renderer.git
|
||||
dropzone 5.9.3 MIT https://github.com/dropzone/dropzone.git
|
||||
emojis-list 3.0.0 MIT git+https://github.com/kikobeats/emojis-list.git
|
||||
engine.io-client 6.0.2 MIT https://github.com/socketio/engine.io-client.git
|
||||
engine.io-parser 5.0.3 MIT git@github.com:socketio/engine.io-parser.git
|
||||
@@ -290,6 +277,7 @@ fast-deep-equal 3.1.3
|
||||
fast-glob 3.2.11 MIT https://github.com/mrmlnc/fast-glob.git
|
||||
fast-json-stable-stringify 2.1.0 MIT git://github.com/epoberezkin/fast-json-stable-stringify.git
|
||||
fast-memoize 2.5.2 MIT git+https://github.com/caiogondim/fast-memoize.git
|
||||
file-selector 0.6.0 MIT https://github.com/react-dropzone/file-selector.git
|
||||
filename-reserved-regex 2.0.0 MIT https://github.com/sindresorhus/filename-reserved-regex.git
|
||||
fill-range 7.0.1 MIT https://github.com/jonschlinkert/fill-range.git
|
||||
find-up 5.0.0 MIT https://github.com/sindresorhus/find-up.git
|
||||
@@ -299,6 +287,7 @@ gensync 1.0.0-beta.2
|
||||
globals 11.12.0 MIT https://github.com/sindresorhus/globals.git
|
||||
globby 12.2.0 MIT https://github.com/sindresorhus/globby.git
|
||||
graphlib 2.1.8 MIT https://github.com/dagrejs/graphlib.git
|
||||
hammerjs 2.0.8 MIT git://github.com/hammerjs/hammer.js.git
|
||||
hard-rejection 2.1.0 MIT https://github.com/sindresorhus/hard-rejection.git
|
||||
has 1.0.3 MIT git://github.com/tarruda/has.git
|
||||
has-cors 1.1.0 MIT git://github.com/component/has-cors.git
|
||||
@@ -327,7 +316,7 @@ is-unc-path 1.0.0
|
||||
javascript-natural-sort 0.7.1 MIT https://github.com/Bill4Time/javascript-natural-sort.git
|
||||
jquery 3.6.0 MIT https://github.com/jquery/jquery.git
|
||||
jquery-contextmenu 2.9.2 MIT git://github.com/swisnl/jQuery-contextMenu.git
|
||||
jquery-ui 1.13.0 MIT git://github.com/jquery/jquery-ui.git
|
||||
jquery-ui 1.13.2 MIT git://github.com/jquery/jquery-ui.git
|
||||
js-tokens 4.0.0 MIT https://github.com/lydell/js-tokens.git
|
||||
jsbn 1.1.0 MIT https://github.com/andyperlitch/jsbn.git
|
||||
jsesc 2.5.2 MIT https://github.com/mathiasbynens/jsesc.git
|
||||
@@ -355,7 +344,26 @@ loader-utils 2.0.2
|
||||
loader-utils 1.4.0 MIT https://github.com/webpack/loader-utils.git
|
||||
locate-path 6.0.0 MIT https://github.com/sindresorhus/locate-path.git
|
||||
lodash 4.17.21 MIT https://github.com/lodash/lodash.git
|
||||
lodash._basebind 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._basecreate 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._basecreatecallback 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._basecreatewrapper 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._createwrapper 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._objecttypes 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._renative 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._setbinddata 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._shimkeys 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._slice 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.bind 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.foreach 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.forown 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.identity 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.isfunction 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.isobject 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.keys 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.memoize 4.1.2 MIT https://github.com/lodash/lodash.git
|
||||
lodash.noop 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.support 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.uniq 4.5.0 MIT https://github.com/lodash/lodash.git
|
||||
loose-envify 1.4.0 MIT git://github.com/zertosh/loose-envify.git
|
||||
lunr 0.7.2 MIT https://github.com/olivernn/lunr.js.git
|
||||
@@ -376,9 +384,8 @@ ml-array-min 1.2.2
|
||||
ml-array-rescale 1.3.6 MIT git+https://github.com/mljs/array.git
|
||||
ml-matrix 6.8.0 MIT https://github.com/mljs/matrix.git
|
||||
mobius1-selectr 2.4.13 MIT git+https://github.com/Mobius1/Selectr.git
|
||||
moment 2.29.3 MIT https://github.com/moment/moment.git
|
||||
moment 2.29.4 MIT https://github.com/moment/moment.git
|
||||
moment-timezone 0.5.34 MIT https://github.com/moment/moment-timezone.git
|
||||
moment-timezone 0.5.33 MIT https://github.com/moment/moment-timezone.git
|
||||
ms 2.1.2 MIT https://github.com/zeit/ms.git
|
||||
nanoid 3.3.2 MIT https://github.com/ai/nanoid.git
|
||||
nanoid 3.2.0 MIT https://github.com/ai/nanoid.git
|
||||
@@ -386,7 +393,7 @@ nanopop 2.1.0
|
||||
node-releases 2.0.1 MIT https://github.com/chicoxyzzy/node-releases.git
|
||||
normalize-url 6.1.0 MIT https://github.com/sindresorhus/normalize-url.git
|
||||
notificar 1.0.1 MIT git+https://github.com/neeksandhu/notificar.git
|
||||
notistack 2.0.5 MIT git+https://github.com/iamhosseindhv/notistack.git
|
||||
notistack 1.0.10 MIT git+https://github.com/iamhosseindhv/notistack.git
|
||||
object-assign 4.1.1 MIT https://github.com/sindresorhus/object-assign.git
|
||||
p-limit 3.1.0 MIT https://github.com/sindresorhus/p-limit.git
|
||||
p-locate 5.0.0 MIT https://github.com/sindresorhus/p-locate.git
|
||||
@@ -437,6 +444,7 @@ postcss-svgo 5.0.3
|
||||
postcss-unique-selectors 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-value-parser 4.1.0 MIT https://github.com/TrySound/postcss-value-parser.git
|
||||
prop-types 15.7.2 MIT https://github.com/facebook/prop-types.git
|
||||
prop-types 15.8.1 MIT https://github.com/facebook/prop-types.git
|
||||
punycode 2.1.1 MIT https://github.com/bestiejs/punycode.js.git
|
||||
queue-microtask 1.2.3 MIT git://github.com/feross/queue-microtask.git
|
||||
quick-lru 5.1.1 MIT https://github.com/sindresorhus/quick-lru.git
|
||||
@@ -453,6 +461,7 @@ rc-util 5.17.0
|
||||
re-resizable 6.9.1 MIT https://github.com/bokuweb/react-resizable-box.git
|
||||
react 16.14.0 MIT git+https://github.com/facebook/react.git
|
||||
react 17.0.2 MIT https://github.com/facebook/react.git
|
||||
react-aspen 1.2.0 MIT https://github.com/neeksandhu/react-aspen.git
|
||||
react-aspen 1.1.1 MIT https://github.com/neeksandhu/react-aspen.git
|
||||
react-checkbox-tree 1.7.2 MIT https://github.com/jakezatecky/react-checkbox-tree
|
||||
react-data-grid 7.0.0-beta.12 MIT https://github.com/adazzle/react-data-grid.git
|
||||
@@ -460,6 +469,7 @@ react-dom 16.14.0
|
||||
react-dom 17.0.2 MIT https://github.com/facebook/react.git
|
||||
react-draggable 4.4.4 MIT https://github.com/react-grid-layout/react-draggable.git
|
||||
react-draggable 4.4.3 MIT https://github.com/mzabriskie/react-draggable.git
|
||||
react-dropzone 14.2.1 MIT https://github.com/react-dropzone/react-dropzone.git
|
||||
react-input-autosize 3.0.0 MIT https://github.com/JedWatson/react-input-autosize.git
|
||||
react-is 16.13.1 MIT https://github.com/facebook/react.git
|
||||
react-is 17.0.2 MIT https://github.com/facebook/react.git
|
||||
@@ -501,7 +511,6 @@ strip-comments 2.0.1
|
||||
strip-indent 4.0.0 MIT https://github.com/sindresorhus/strip-indent.git
|
||||
styled-components 5.3.3 MIT git+https://github.com/styled-components/styled-components.git
|
||||
stylehacks 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
stylis 4.0.13 MIT https://github.com/thysultan/stylis.js
|
||||
stylis 4.0.10 MIT https://github.com/thysultan/stylis.js
|
||||
supports-color 5.5.0 MIT https://github.com/chalk/supports-color.git
|
||||
supports-color 7.2.0 MIT https://github.com/chalk/supports-color.git
|
||||
@@ -557,6 +566,7 @@ postcss-modules-scope 3.0.0
|
||||
postcss-modules-values 4.0.0 ISC git+https://github.com/css-modules/postcss-modules-values.git
|
||||
react-timer-hook 3.0.5 ISC git+https://github.com/amrlabib/react-timer-hook.git
|
||||
semver 7.3.5 ISC https://github.com/npm/node-semver
|
||||
semver 7.3.7 ISC https://github.com/npm/node-semver.git
|
||||
semver 6.3.0 ISC https://github.com/npm/node-semver
|
||||
vanilla-picker 2.12.1 ISC https://github.com/Sphinxxxx/vanilla-picker.git
|
||||
yallist 4.0.0 ISC git+https://github.com/isaacs/yallist.git
|
||||
@@ -606,9 +616,9 @@ pako 1.0.11
|
||||
precond 0.2.3 MIT* https://github.com/MathieuTurcotte/node-precond.git
|
||||
webcabin-docker 2.2.5 MIT* Unknown
|
||||
spdx-exceptions 2.3.0 CC-BY-3.0 https://github.com/kemitchell/spdx-exceptions.json.git
|
||||
tablesorter 2.31.3 (MIT OR GPL-2.0) git://github.com/Mottie/tablesorter.git
|
||||
tslib 2.4.0 0BSD https://github.com/Microsoft/tslib.git
|
||||
tslib 2.3.0 0BSD https://github.com/Microsoft/tslib.git
|
||||
type-fest 1.4.0 (MIT OR CC0-1.0) https://github.com/sindresorhus/type-fest.git
|
||||
|
||||
534 dependencies listed.
|
||||
540 dependencies listed.
|
||||
|
||||
@@ -273,10 +273,16 @@ REM Main build sequence Ends
|
||||
REM YARN END
|
||||
|
||||
REM WGET
|
||||
FOR /f "tokens=2 delims='" %%i IN ('yarn info nw ^| findstr "latest: "') DO SET "NW_VERSION=%%i"
|
||||
:GET_NW
|
||||
wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
|
||||
IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
|
||||
REM Comment out the below for loop as the latest version having
|
||||
REM some problem https://github.com/nwjs/nw.js/issues/7902, so for
|
||||
REM the time being hardcoded the version to 0.62.2
|
||||
REM FOR /f "tokens=2 delims='" %%i IN ('yarn info nw ^| findstr "latest: "') DO SET "NW_VERSION=%%i"
|
||||
REM :GET_NW
|
||||
REM wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
|
||||
REM IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
|
||||
|
||||
SET "NW_VERSION=0.62.2"
|
||||
wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
|
||||
|
||||
tar -C "%TMPDIR%" -xvf "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip" || EXIT /B 1
|
||||
REM WGET END
|
||||
|
||||
@@ -19,7 +19,7 @@ the restore point to add* to provide a descriptive name for the restore point.
|
||||
|
||||
For more information about using a restore point as a recovery target, please
|
||||
see the
|
||||
`PostgreSQL documentation <https://www.postgresql.org/docs/current/recovery-target-settings.html#RECOVERY-TARGET-NAME>`_.
|
||||
`PostgreSQL documentation <https://www.postgresql.org/docs/current/runtime-config-wal.html#RUNTIME-CONFIG-WAL-RECOVERY-TARGET>`_.
|
||||
|
||||
* Click the *OK* button to save the restore point.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
@@ -36,5 +36,8 @@ Use the *Change Password* dialog to change your password:
|
||||
* Enter the desired password for in the *New Password* field.
|
||||
* Re-enter the new password in the *Confirm Password* field.
|
||||
|
||||
Click the *OK* button to change your password; click *Cancel* to exit the dialog
|
||||
without changing your password.
|
||||
Click the *Save* button to change your password.
|
||||
|
||||
Click the *Close* button to exit without changing your password.
|
||||
|
||||
Click the *Reset* button to reset the values.
|
||||
@@ -0,0 +1,120 @@
|
||||
.. _cloud_azure_postgresql:
|
||||
|
||||
******************************************
|
||||
`Azure PostgreSQL Cloud Deployment`:index:
|
||||
******************************************
|
||||
|
||||
To deploy a PostgreSQL server on the Azure cloud, follow the below steps.
|
||||
|
||||
.. image:: images/cloud_azure_provider.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Once you launch the tool, select the Azure PostgreSQL option.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
|
||||
.. image:: images/cloud_azure_credentials.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
In the Credentials dialog, select authentication method either interactive
|
||||
browser or Azure CLI. Azure CLI will use the currently logged in identity
|
||||
through the Azure CLI on the local machine. Interactive Browser will
|
||||
open a browser window to authenticate a user interactively.
|
||||
|
||||
Use the *Azure tenant* id to specify Azure tenant ID against which user
|
||||
is authenticated.
|
||||
|
||||
Clicking the *Click here to authenticate yourself to Microsoft Azure*
|
||||
button, user will be redirected to the Microsoft Azure authentication page in a
|
||||
new browser tab if the Interactive Browser option is selected.
|
||||
Azure CLI authentication can be used only in Desktop mode.
|
||||
|
||||
Once authentication is completed, click on the next button to proceed.
|
||||
|
||||
.. image:: images/cloud_azure_instance.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance
|
||||
details.
|
||||
|
||||
* Use the *Cluster name* field to add a name for the PostgreSQL
|
||||
server; the name specified will be displayed in the *Browser* tree control too.
|
||||
|
||||
* Select a subscription from the *Subscription* options which are populated based
|
||||
on user access levels in Azure portal.
|
||||
|
||||
* Select the resource group from *Resource Group* dropdown under which the
|
||||
PostgreSQL instance will be created.
|
||||
|
||||
* Select the location to deploy PostgreSQL instance from *Location*
|
||||
options.
|
||||
|
||||
* Select the availability zone in specified region to deploy PostgreSQL
|
||||
instance from *Availability zone* options.
|
||||
|
||||
* Use *Database version* options to specify PostgreSQL database version.
|
||||
|
||||
* Use the *Instance class* field to allocate the computational, network, and
|
||||
memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Use the *Storage size* option to specify the storage capacity.
|
||||
|
||||
.. image:: images/cloud_azure_network.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
* Use the *Public IP* field to specify the List of IP Addresses or range of
|
||||
IP Addresses (start IP Address - end IP address) from which inbound traffic
|
||||
should be accepted. Add multiple IP addresses/ranges separated with commas,
|
||||
for example: "192.168.0.50, 192.168.0.100 - 192.168.0.200"
|
||||
|
||||
* User *Zone redundant high availability* option to specify High Availability
|
||||
option. Zone redundant high availability deploys a standby replica in a
|
||||
different zone.
|
||||
The Burstable instance type does not support high availability.
|
||||
|
||||
.. image:: images/cloud_azure_database.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the PostgreSQL database details.
|
||||
|
||||
* Use the drop-down list in the *pgAdmin server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Browser* tree
|
||||
control within the specified group.
|
||||
|
||||
* Use the *Admin username* field to add the database name for the PostgreSQL
|
||||
server.
|
||||
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
Click on the next button to proceed.
|
||||
|
||||
.. image:: images/cloud_azure_review.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
At the end, review the instance details that you provided. Click on Finish
|
||||
button to deploy the instance on Azure PostgreSQL.
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
|
||||
.. image:: images/cloud_azure_bg_process_watcher.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
|
||||
.. image:: images/cloud_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
@@ -15,4 +15,5 @@ To launch the *Cloud Deployment...* tool, right click on the *Server Group* or
|
||||
:maxdepth: 2
|
||||
|
||||
cloud_aws_rds
|
||||
cloud_edb_biganimal
|
||||
cloud_edb_biganimal
|
||||
cloud_azure_postgresql
|
||||
@@ -52,6 +52,14 @@ to login to pgAdmin. This variable is required and must be set at launch time.
|
||||
This is the password used when setting up the initial administrator account to
|
||||
login to pgAdmin. This variable is required and must be set at launch time.
|
||||
|
||||
**PGADMIN_DEFAULT_PASSWORD_FILE**
|
||||
|
||||
This is the password used when setting up the initial administrator account to
|
||||
login to pgAdmin. This value should be set to *docker secret* in order to set
|
||||
the password. This variable is supported in docker swarm environment or while creating
|
||||
container with docker compose. PGADMIN_DEFAULT_PASSWORD or PGADMIN_DEFAULT_PASSWORD_FILE
|
||||
variable is required and must be set at launch time.
|
||||
|
||||
**PGADMIN_DISABLE_POSTFIX**
|
||||
|
||||
*Default: <null>*
|
||||
@@ -414,7 +422,7 @@ If you wish to host pgAdmin under a subdirectory using Traefik, the
|
||||
configuration changes are typically made to the way the container is launched
|
||||
and not to Traefik itself. For example, to host pgAdmin under */pgadmin4/*
|
||||
instead of at the root directory, the Traefik configuration above may be used if
|
||||
the container is launched like this:
|
||||
the container is launched like this while using the version v1 of Traefik:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@@ -430,3 +438,16 @@ The *SCRIPT_NAME* environment variable has been set to tell the container it is
|
||||
being hosted under a subdirectory (in the same way as the *X-Script-Name* header
|
||||
is used with Nginx), and a label has been added to tell Traefik to route
|
||||
requests under the subdirectory to this container.
|
||||
|
||||
While using the Traefik configuration for version v2 for hosting pgAdmin under subdirectory
|
||||
the container is typically launched per the example below:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run --name "pgadmin4" \
|
||||
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
|
||||
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
|
||||
-e "SCRIPT_NAME=/pgadmin4" \
|
||||
-l "traefik.frontend.pgadmin4.rule=Host(`host.example.com`) && PathPrefix(`/pgadmin4`)" \
|
||||
-d dpage/pgadmin4
|
||||
@@ -46,6 +46,7 @@ Use the *Definition* tab to set properties for the database:
|
||||
* Specify a connection limit in the *Connection Limit* field to configure the
|
||||
maximum number of connection requests. The default value (*-1*) allows
|
||||
unlimited connections to the database.
|
||||
* If the *templates?* is set to true, then database will be a template database.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
|
||||
@@ -117,6 +117,8 @@ The toolbar options are:
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| *Stop* | Click the *Stop* icon to halt the execution of a program. |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| *Help* | Click the *Help* icon to open debugger documentation. |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
|
||||
The top panel of the debugger window displays the program body; click in the
|
||||
grey margin next to a line number to add a breakpoint. The highlighted line in
|
||||
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 171 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 9.9 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 239 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 282 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 177 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 195 KiB After Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 203 KiB |
|
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
@@ -8,39 +8,36 @@ Use the *Import/Export data* dialog to copy data from a table to a file, or copy
|
||||
data from a file into a table.
|
||||
|
||||
The *Import/Export data* dialog organizes the import/export of data through the
|
||||
*Options* and *Columns* tabs.
|
||||
*General*, *Options* and *Columns* tabs.
|
||||
|
||||
.. image:: images/import_export_general.png
|
||||
:alt: Import Export data dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to specify import and export preferences:
|
||||
|
||||
* Move the *Import/Export* switch to the *Import* position to specify that the
|
||||
server should import data to a table from a file. The default is *Import*.
|
||||
|
||||
* Enter the name of the source or target file in the *Filename* field.
|
||||
Optionally, select the *Browser* icon (ellipsis) to the right to navigate
|
||||
into a directory and select a file.
|
||||
|
||||
* Use the drop-down listbox in the *Format* field to specify the file type.
|
||||
Select:
|
||||
|
||||
* *binary* for a .bin file.
|
||||
* *csv* for a .csv file.
|
||||
* *text* for a .txt file.
|
||||
|
||||
* Use the drop-down listbox in the *Encoding* field to specify the type of
|
||||
character encoding.
|
||||
|
||||
.. image:: images/import_export_options.png
|
||||
:alt: Import Export data dialog options tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Options* tab to specify import and export preferences:
|
||||
|
||||
* Move the *Import/Export* switch to the *Import* position to specify that the
|
||||
server should import data to a table from a file. The default is *Export*.
|
||||
|
||||
* Use the fields in the *File Info* field box to specify information about the
|
||||
source or target file:
|
||||
|
||||
* Enter the name of the source or target file in the *Filename* field.
|
||||
Optionally, select the *Browser* icon (ellipsis) to the right to navigate
|
||||
into a directory and select a file.
|
||||
* Use the drop-down listbox in the *Format* field to specify the file type.
|
||||
Select:
|
||||
|
||||
* *binary* for a .bin file.
|
||||
* *csv* for a .csv file.
|
||||
* *text* for a .txt file.
|
||||
|
||||
* Use the drop-down listbox in the *Encoding* field to specify the type of
|
||||
character encoding.
|
||||
|
||||
.. image:: images/import_export_miscellaneous.png
|
||||
:alt: Import Export data dialog miscellaneous tab
|
||||
:align: center
|
||||
|
||||
* Use the fields in the *Miscellaneous* field box to specify additional
|
||||
information:
|
||||
* Use the fields in the *Options* tab to specify additional information:
|
||||
|
||||
* Move the *OID* switch to the *Yes* position to include the *OID* column.
|
||||
The *OID* is a system-assigned value that may not be modified. The default
|
||||
@@ -57,6 +54,8 @@ Use the fields in the *Options* tab to specify import and export preferences:
|
||||
be a single quote or a double quote.
|
||||
* Specify a character that should appear before a data character that matches
|
||||
the *QUOTE* value in the *Escape* field.
|
||||
* Use the *NULL Strings* field to specify a string that will represent a null
|
||||
value within the source or target file.
|
||||
|
||||
Click the *Columns* tab to continue.
|
||||
|
||||
@@ -71,9 +70,8 @@ or exported:
|
||||
columns from the drop-down listbox. To delete a selection, click the *x* to
|
||||
the left of the column name. Click an empty spot inside the field to access
|
||||
the drop-down list.
|
||||
* Use the *NULL Strings* field to specify a string that will represent a null
|
||||
value within the source or target file.
|
||||
* If enabled, click inside the *Not null columns* field to select one or more
|
||||
|
||||
* If enabled, click inside the *NOT NULL columns* field to select one or more
|
||||
columns that will not be checked for a NULL value. To delete a column, click
|
||||
the *x* to the left of the column name.
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
.. _preferences:
|
||||
|
||||
***************************
|
||||
@@ -68,6 +69,8 @@ Use the fields on the *Display* panel to specify general display preferences:
|
||||
* When the *Show system objects?* switch is set to *True*, the client will
|
||||
display system objects such as system schemas (for example, *pg_temp*) or
|
||||
system columns (for example, *xmin* or *ctid*) in the tree control.
|
||||
* When the *Show template databases?* switch is set to *True*, the client will
|
||||
display template databases.
|
||||
|
||||
Use the fields on the *Keyboard shortcuts* panel to configure shortcuts for the
|
||||
main window navigation:
|
||||
@@ -128,12 +131,25 @@ The Dashboards Node
|
||||
|
||||
Expand the *Dashboards* node to specify your dashboard display preferences.
|
||||
|
||||
.. image:: images/preferences_dashboard_graphs.png
|
||||
:alt: Preferences dialog dashboard graph options
|
||||
.. image:: images/preferences_dashboard_display.png
|
||||
:alt: Preferences dialog dashboard display options
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Graphs* panel to specify your display preferences for
|
||||
the graphs on the *Dashboard* tab:
|
||||
* Set the warning and alert threshold value to highlight the long-running
|
||||
queries on the dashboard.
|
||||
|
||||
* When the *Show activity?* switch is set to *True*, activity tables will be
|
||||
displayed on dashboards.
|
||||
|
||||
* When the *Show graphs?* switch is set to *True*, graphs will be displayed on
|
||||
dashboards.
|
||||
|
||||
.. image:: images/preferences_dashboard_refresh.png
|
||||
:alt: Preferences dialog dashboard refresh options
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Refresh rates* panel to specify your refersh rates
|
||||
preferences for the graphs on the *Dashboard* tab:
|
||||
|
||||
* Use the *Block I/O statistics refresh rate* field to specify the number of
|
||||
seconds between block I/O statistic samples displayed in graphs.
|
||||
@@ -150,24 +166,6 @@ the graphs on the *Dashboard* tab:
|
||||
* Use the *Tuples out refresh rate* field to specify the number of seconds
|
||||
between tuples-out samples displayed in graphs.
|
||||
|
||||
.. image:: images/preferences_dashboard_display.png
|
||||
:alt: Preferences dialog dashboard display options
|
||||
:align: center
|
||||
|
||||
* Set the warning and alert threshold value to highlight the long-running
|
||||
queries on the dashboard.
|
||||
|
||||
* When the *Show activity?* switch is set to *True*, activity tables will be
|
||||
displayed on dashboards.
|
||||
|
||||
* When the *Show graph data points?* switch is set to *True*, data points will
|
||||
be visible on graph lines.
|
||||
|
||||
* When the *Show graphs?* switch is set to *True*, graphs will be displayed on
|
||||
dashboards.
|
||||
|
||||
* When the *Show mouse hover tooltip?* switch is set to *True*, a tooltip will
|
||||
appear on mouse hover on the graph lines giving the data point details.
|
||||
|
||||
|
||||
The Debugger Node
|
||||
@@ -194,6 +192,27 @@ ERD Tool window navigation:
|
||||
:alt: Preferences dialog erd keyboard shortcuts section
|
||||
:align: center
|
||||
|
||||
The Graphs Node
|
||||
***************
|
||||
|
||||
Expand the *Graphs* node to specify your Graphs display preferences.
|
||||
|
||||
.. image:: images/preferences_dashboard_graphs.png
|
||||
:alt: Preferences dialog dashboard graph options
|
||||
:align: center
|
||||
|
||||
* Use the *Chart line width* field to specify the width of the lines on the
|
||||
line chart.
|
||||
|
||||
* When the *Show graph data points?* switch is set to *True*, data points will
|
||||
be visible on graph lines.
|
||||
|
||||
* When the *Show mouse hover tooltip?* switch is set to *True*, a tooltip will
|
||||
appear on mouse hover on the graph lines giving the data point details.
|
||||
|
||||
* When the *Use different data point styles?* switch is set to *True*,
|
||||
data points will be visible in a different style on each graph lines.
|
||||
|
||||
The Miscellaneous Node
|
||||
**********************
|
||||
|
||||
@@ -271,6 +290,9 @@ preferences for the Query Editor tool.
|
||||
|
||||
Use the fields on the *Auto Completion* panel to set the auto completion options.
|
||||
|
||||
* When the *Autocomplete on key press* switch is set to *True* then autocomplete
|
||||
will be available on key press along with CTRL/CMD + Space. If it is set to
|
||||
*False* then autocomplete is only activated when CTRL/CMD + Space is pressed.
|
||||
* When the *Keywords in uppercase* switch is set to *True* then keywords are
|
||||
shown in upper case.
|
||||
|
||||
@@ -353,6 +375,16 @@ a graphical EXPLAIN.
|
||||
* When the *Verbose output?* switch is set to *True*, graphical explain details
|
||||
will include extended information about the query execution plan.
|
||||
|
||||
.. image:: images/preferences_graph_visualiser.png
|
||||
:alt: Preferences dialog sqleditor graph visualiser section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Graph Visualiser* panel to specify the settings
|
||||
related to graphs.
|
||||
|
||||
* Use the *Row Limit* field to specify the maximum number of rows that will
|
||||
be plotted on a chart.
|
||||
|
||||
.. image:: images/preferences_sql_options.png
|
||||
:alt: Preferences dialog sqleditor options section
|
||||
:align: center
|
||||
|
||||
@@ -106,6 +106,45 @@ fully qualified with schema. Double quotes will be added if required.
|
||||
For functions and procedures, the function name along with parameter names will
|
||||
be pasted in the Query Tool.
|
||||
|
||||
Query History Panel
|
||||
*******************
|
||||
|
||||
Use the *Query History* tab to review activity for the current session:
|
||||
|
||||
.. image:: images/query_output_history.png
|
||||
:alt: Query tool history panel
|
||||
:align: center
|
||||
|
||||
The Query History tab displays information about recent commands:
|
||||
|
||||
* The date and time that a query was invoked.
|
||||
* The text of the query.
|
||||
* The number of rows returned by the query.
|
||||
* The amount of time it took the server to process the query and return a
|
||||
result set.
|
||||
* Messages returned by the server (not noted on the *Messages* tab).
|
||||
* The source of the query (indicated by icons corresponding to the toolbar).
|
||||
|
||||
You can show or hide the queries generated internally by pgAdmin (during
|
||||
'View/Edit Data' or 'Save Data' operations).
|
||||
|
||||
You can remove a single query by selecting it and clicking on the *Remove*
|
||||
button. If you would like to remove all of the histories from the
|
||||
*Query History* tab, then click on the *Remove All* button.
|
||||
|
||||
By using the *Copy* button, you can copy a particular query to the clipboard,
|
||||
and with the *Copy to Query Editor* button, you can copy a specific query to
|
||||
the Query Editor tab. During this operation, all existing content in the
|
||||
Query Editor is erased.
|
||||
|
||||
Query History is maintained across sessions for each database on a per-user
|
||||
basis when running in Query Tool mode. In View/Edit Data mode, history is not
|
||||
retained. By default, the last 20 queries are stored for each database. This
|
||||
can be adjusted in ``config_local.py`` or ``config_system.py`` (see the
|
||||
:ref:`config.py <config_py>` documentation) by overriding the
|
||||
`MAX_QUERY_HIST_STORED` value. See the :ref:`Deployment <deployment>` section
|
||||
for more information.
|
||||
|
||||
The Data Output Panel
|
||||
*********************
|
||||
|
||||
@@ -288,44 +327,117 @@ particular channel.
|
||||
:alt: Query tool notifications panel
|
||||
:align: center
|
||||
|
||||
Query History Panel
|
||||
*******************
|
||||
Graph Visualiser Panel
|
||||
**********************
|
||||
|
||||
Use the *Query History* tab to review activity for the current session:
|
||||
Click the Graph Visualiser button in the toolbar to generate the *Graphs* of
|
||||
the query results. The graph visualiser supports Line Charts, Stacked Line Charts,
|
||||
Bar Charts, Stacked Bar Charts, and Pie Charts.
|
||||
|
||||
.. image:: images/query_output_history.png
|
||||
:alt: Query tool history panel
|
||||
.. image:: images/query_graph_visualiser_panel.png
|
||||
:alt: Query tool graph visualiser panel
|
||||
:align: center
|
||||
|
||||
The Query History tab displays information about recent commands:
|
||||
* Graph Type
|
||||
|
||||
* The date and time that a query was invoked.
|
||||
* The text of the query.
|
||||
* The number of rows returned by the query.
|
||||
* The amount of time it took the server to process the query and return a
|
||||
result set.
|
||||
* Messages returned by the server (not noted on the *Messages* tab).
|
||||
* The source of the query (indicated by icons corresponding to the toolbar).
|
||||
Choose the type of the graph that you would like to generate.
|
||||
|
||||
You can show or hide the queries generated internally by pgAdmin (during
|
||||
'View/Edit Data' or 'Save Data' operations).
|
||||
.. image:: images/query_graph_type.png
|
||||
:alt: Query tool graph visualiser graph type
|
||||
:align: center
|
||||
|
||||
You can remove a single query by selecting it and clicking on the *Remove*
|
||||
button. If you would like to remove all of the histories from the
|
||||
*Query History* tab, then click on the *Remove All* button.
|
||||
* X Axis
|
||||
|
||||
By using the *Copy* button, you can copy a particular query to the clipboard,
|
||||
and with the *Copy to Query Editor* button, you can copy a specific query to
|
||||
the Query Editor tab. During this operation, all existing content in the
|
||||
Query Editor is erased.
|
||||
Choose the column whose value you wish to display on X-axis from the *X Axis*
|
||||
dropdown. Select the *<Row Number>* option to use the number of rows as labels
|
||||
on the X-axis.
|
||||
|
||||
Query History is maintained across sessions for each database on a per-user
|
||||
basis when running in Query Tool mode. In View/Edit Data mode, history is not
|
||||
retained. By default, the last 20 queries are stored for each database. This
|
||||
can be adjusted in ``config_local.py`` or ``config_system.py`` (see the
|
||||
:ref:`config.py <config_py>` documentation) by overriding the
|
||||
`MAX_QUERY_HIST_STORED` value. See the :ref:`Deployment <deployment>` section
|
||||
for more information.
|
||||
.. image:: images/query_graph_xaxis.png
|
||||
:alt: Query tool graph visualiser xaxis
|
||||
:align: center
|
||||
|
||||
* Y Axis
|
||||
|
||||
Choose the columns whose value you wish to display on Y-axis from the *Y Axis*
|
||||
dropdown. Users can choose multiple columns. Choose the *<Select All>* option
|
||||
from the drop-down menu to select all the columns.
|
||||
|
||||
.. image:: images/query_graph_yaxis.png
|
||||
:alt: Query tool graph visualiser yaxis
|
||||
:align: center
|
||||
|
||||
* Download and Zoom button
|
||||
|
||||
Zooming is performed by clicking and selecting an area over the chart with the
|
||||
mouse. The *Zoom to original* button will bring you back to the original zoom
|
||||
level.
|
||||
|
||||
Click the *Download* button on the button bar to download the chart.
|
||||
|
||||
.. image:: images/query_graph_toolbar.png
|
||||
:alt: Query tool graph visualiser toolbar
|
||||
:align: center
|
||||
|
||||
Line Chart
|
||||
==========
|
||||
|
||||
The *Line Chart* can be generated by selecting the 'Line Chart'
|
||||
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
|
||||
clicking on the 'Generate' button. Below is an example of a chart of employee
|
||||
names and their salaries.
|
||||
|
||||
.. image:: images/query_line_chart.png
|
||||
:alt: Query tool graph visualiser line chart
|
||||
:align: center
|
||||
|
||||
Set *Use different data point styles?* option to true in the :ref:`preferences`,
|
||||
to show data points in a different style on each graph lines.
|
||||
|
||||
Stacked Line Chart
|
||||
==================
|
||||
|
||||
The *Stacked Line Chart* can be generated by selecting the 'Stacked Line Chart'
|
||||
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
|
||||
clicking on the 'Generate' button.
|
||||
|
||||
.. image:: images/query_stacked_line_chart.png
|
||||
:alt: Query tool graph visualiser stacked line chart
|
||||
:align: center
|
||||
|
||||
Bar Chart
|
||||
==========
|
||||
|
||||
The *Bar Chart* can be generated by selecting the 'Bar Chart'
|
||||
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
|
||||
clicking on the 'Generate' button.
|
||||
|
||||
.. image:: images/query_bar_chart.png
|
||||
:alt: Query tool graph visualiser bar chart
|
||||
:align: center
|
||||
|
||||
Stacked Bar Chart
|
||||
=================
|
||||
|
||||
The *Stacked Bar Chart* can be generated by selecting the 'Stacked Bar Chart'
|
||||
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
|
||||
clicking on the 'Generate' button.
|
||||
|
||||
|
||||
.. image:: images/query_stacked_bar_chart.png
|
||||
:alt: Query tool graph visualiser stacked bar chart
|
||||
:align: center
|
||||
|
||||
Pie Chart
|
||||
=========
|
||||
|
||||
The *Pie Chart* can be generated by selecting the 'Pie Chart'
|
||||
from the Graph Type drop-down, selecting the Label and Value, and
|
||||
clicking on the 'Generate' button.
|
||||
|
||||
|
||||
.. image:: images/query_pie_chart.png
|
||||
:alt: Query tool graph visualiser pie chart
|
||||
:align: center
|
||||
|
||||
Connection Status
|
||||
*****************
|
||||
@@ -382,6 +494,6 @@ The server will prompt you for confirmation to delete the macro.
|
||||
|
||||
To execute a macro, simply select the appropriate shortcut keys, or select it from the *Macros* menu.
|
||||
|
||||
.. image:: images/query_tool_macros_execution.png
|
||||
.. image:: images/query_output_data.png
|
||||
:alt: Query Tool Macros Execution
|
||||
:align: center
|
||||
@@ -191,6 +191,8 @@ Data Editing Options
|
||||
| | a query has been executed and there are results in the data grid. You can specify the CSV/TXT | |
|
||||
| | settings in the Preference Dialogue under SQL Editor -> CSV/TXT output. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Graph Visualiser | Use the Graph Visualiser button to generate graphs of the query results. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Status Bar
|
||||
**********
|
||||
|
||||
@@ -11,6 +11,8 @@ notes for it.
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
release_notes_6_12
|
||||
release_notes_6_11
|
||||
release_notes_6_10
|
||||
release_notes_6_9
|
||||
release_notes_6_8
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
************
|
||||
Version 6.11
|
||||
************
|
||||
|
||||
Release date: 2022-06-30
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.10.
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #2647 <https://redmine.postgresql.org/issues/2647>`_ - Added mouse over indication for breakpoint area in the Debugger.
|
||||
| `Issue #2648 <https://redmine.postgresql.org/issues/2648>`_ - Added search text option to the Debugger panel.
|
||||
| `Issue #7178 <https://redmine.postgresql.org/issues/7178>`_ - Added capability to deploy PostgreSQL servers on Microsoft Azure.
|
||||
| `Issue #7332 <https://redmine.postgresql.org/issues/7332>`_ - Added support for passing password using Docker Secret to Docker images.
|
||||
| `Issue #7351 <https://redmine.postgresql.org/issues/7351>`_ - Added the option 'Show template databases?' to display template databases regardless of the setting of 'Show system objects?'.
|
||||
| `Issue #7485 <https://redmine.postgresql.org/issues/7485>`_ - Added support for visualise the graph using a Line chart in the query tool.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #6132 <https://redmine.postgresql.org/issues/6132>`_ - Port Debugger to React.
|
||||
| `Issue #7315 <https://redmine.postgresql.org/issues/7315>`_ - Updates documentation for the Traefik v2 container deployment.
|
||||
| `Issue #7411 <https://redmine.postgresql.org/issues/7411>`_ - Update pgcli to latest release 3.4.1.
|
||||
| `Issue #7469 <https://redmine.postgresql.org/issues/7469>`_ - Upgrade Chartjs to the latest 3.8.0.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #7423 <https://redmine.postgresql.org/issues/7423>`_ - Fixed an issue where there is no setting to turn off notifications in the Query Tool.
|
||||
| `Issue #7440 <https://redmine.postgresql.org/issues/7440>`_ - Fixed an issue where passwords entered in the 'Connect To Server' dialog were truncated.
|
||||
| `Issue #7441 <https://redmine.postgresql.org/issues/7441>`_ - Ensure that the Query Editor should be focused when switching between query tool tabs.
|
||||
| `Issue #7443 <https://redmine.postgresql.org/issues/7443>`_ - Fixed and issue where 'Use spaces' not working in the query tool.
|
||||
| `Issue #7453 <https://redmine.postgresql.org/issues/7453>`_ - Fixed an issue where the Database restriction is not working.
|
||||
| `Issue #7460 <https://redmine.postgresql.org/issues/7460>`_ - Fixed an issue where pgAdmin stuck while creating a new index.
|
||||
| `Issue #7461 <https://redmine.postgresql.org/issues/7461>`_ - Fixed an issue where the connection wasn't being closed when the user switched to a new connection and closed the query tool.
|
||||
| `Issue #7468 <https://redmine.postgresql.org/issues/7468>`_ - Skip the history records if the JSON info can't be parsed instead of showing 'No history'.
|
||||
| `Issue #7502 <https://redmine.postgresql.org/issues/7502>`_ - Fixed an issue where an error message is displayed when creating the new database.
|
||||
| `Issue #7506 <https://redmine.postgresql.org/issues/7506>`_ - Fixed permission denied error when deploying PostgreSQL in Azure using Docker.
|
||||
@@ -0,0 +1,40 @@
|
||||
************
|
||||
Version 6.12
|
||||
************
|
||||
|
||||
Release date: 2022-07-28
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.11.
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #4488 <https://redmine.postgresql.org/issues/4488>`_ - Added option to trigger autocomplete on key press in the query tool.
|
||||
| `Issue #4607 <https://redmine.postgresql.org/issues/4607>`_ - Allow users to delete files/folders from the storage manager.
|
||||
| `Issue #7389 <https://redmine.postgresql.org/issues/7389>`_ - Allow users to search within the file/storage manager.
|
||||
| `Issue #7486 <https://redmine.postgresql.org/issues/7486>`_ - Added support for visualizing the graphs using Stacked Line, Bar, and Stacked Bar charts in the query tool.
|
||||
| `Issue #7487 <https://redmine.postgresql.org/issues/7487>`_ - Added support for visualise the graph using a Pie chart in the query tool.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #7313 <https://redmine.postgresql.org/issues/7313>`_ - Port the file/storage manager to React.
|
||||
| `Issue #7341 <https://redmine.postgresql.org/issues/7341>`_ - Port change password dialog to React.
|
||||
| `Issue #7342 <https://redmine.postgresql.org/issues/7342>`_ - Port Master Password dialog to React.
|
||||
| `Issue #7492 <https://redmine.postgresql.org/issues/7492>`_ - Removing dynamic module loading and replacing it with static loading.
|
||||
| `Issue #7546 <https://redmine.postgresql.org/issues/7546>`_ - Port named restore point dialog to React.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #7428 <https://redmine.postgresql.org/issues/7428>`_ - Preserve the settings set by the user in the import/export data dialog.
|
||||
| `Issue #7471 <https://redmine.postgresql.org/issues/7471>`_ - Ensure that the splash screen can be moved.
|
||||
| `Issue #7508 <https://redmine.postgresql.org/issues/7508>`_ - Fixed an issue where comments on indexes are not displayed.
|
||||
| `Issue #7512 <https://redmine.postgresql.org/issues/7512>`_ - Ensure that notices should not disappear from the messages tab.
|
||||
| `Issue #7517 <https://redmine.postgresql.org/issues/7517>`_ - Enable the start debugging button once execution is completed.
|
||||
| `Issue #7518 <https://redmine.postgresql.org/issues/7518>`_ - Ensure that dashboard graph API is not called after the panel has been closed.
|
||||
| `Issue #7519 <https://redmine.postgresql.org/issues/7519>`_ - Ensure that geometry should be shown for all the selected cells.
|
||||
| `Issue #7520 <https://redmine.postgresql.org/issues/7520>`_ - Fixed the JSON editor issue of hiding the first record.
|
||||
| `Issue #7522 <https://redmine.postgresql.org/issues/7522>`_ - Added support for Azure PostgreSQL deployment in server mode.
|
||||
| `Issue #7523 <https://redmine.postgresql.org/issues/7523>`_ - Fixed typo error for Statistics on the table header.
|
||||
| `Issue #7524 <https://redmine.postgresql.org/issues/7524>`_ - Fixed an issue where new folders cannot be created in the save dialog.
|
||||
@@ -20,48 +20,54 @@ Use icons on the top of the *Storage Manager* window to manage storage:
|
||||
|
||||
Use the ``Home`` icon |home| to return to the home directory.
|
||||
|
||||
.. |home| image:: images/home.png
|
||||
.. |home| image:: images/sm_home.png
|
||||
|
||||
Use the ``Up Arrow`` icon |uparrow| to return to the previous directory.
|
||||
|
||||
.. |uparrow| image:: images/uparrow.png
|
||||
.. |uparrow| image:: images/sm_go_back.png
|
||||
|
||||
Use the ``Refresh`` icon |refresh| to display the most-recent files available.
|
||||
|
||||
.. |refresh| image:: images/refresh.png
|
||||
.. |refresh| image:: images/sm_refresh.png
|
||||
|
||||
Select the ``Download`` icon |download| to download the selected file.
|
||||
|
||||
.. |download| image:: images/download.png
|
||||
|
||||
Select the ``Delete`` icon |delete| to delete the selected file or folder.
|
||||
|
||||
.. |delete| image:: images/delete.png
|
||||
|
||||
Select the ``Edit`` icon |edit| to rename a file or folder.
|
||||
|
||||
.. |edit| image:: images/edit.png
|
||||
|
||||
Use the ``Upload`` icon |upload| to upload a file.
|
||||
|
||||
.. |upload| image:: images/upload.png
|
||||
.. |download| image:: images/sm_download.png
|
||||
|
||||
Use the ``New Folder`` icon |folder| to add a new folder.
|
||||
|
||||
.. |folder| image:: images/folder.png
|
||||
|
||||
Use the ``Grid View`` icon |gridview| to display all the files and folders in a grid view.
|
||||
|
||||
.. |gridview| image:: images/gridview.png
|
||||
|
||||
Use the ``Table View`` icon |tableview| to display all the files and folders in a list view.
|
||||
|
||||
.. |tableview| image:: images/tableview.png
|
||||
|
||||
Click on the check box next to *Show hidden files and folders* at the bottom of the window to view hidden files and folders.
|
||||
.. |folder| image:: images/sm_new_folder.png
|
||||
|
||||
Use the *Format* drop down list to select the format of the files to be displayed; choose from *sql*, *csv*, or *All Files*.
|
||||
|
||||
Other Options
|
||||
*********************
|
||||
|
||||
.. image:: images/sm_options.png
|
||||
:alt: Other options
|
||||
:align: center
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 5
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| Menu | Behavior |
|
||||
+======================+===================================================================================================+
|
||||
| *Rename* | Click the *Rename* option to rename a file/folder. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| *Delete* | Click the *Delete* option to rename a file/folder. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| *Upload* | Click the *Upload* option to upload multiple files to the current folder. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| *List View* | Click the *List View* option to to display all the files and folders in a list view. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| *Grid View* | Click the *Grid View* option to to display all the files and folders in a grid view. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| *Show Hidden Files* | Click the *Show Hidden Files* option to view hidden files and folders. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
You can also download backup files through *Storage Manager* at the successful completion of the backups taken through :ref:`Backup Dialog <backup_dialog>`, :ref:`Backup Global Dialog <backup_globals_dialog>`, or :ref:`Backup Server Dialog <backup_server_dialog>`.
|
||||
|
||||
At the successful completion of a backup, click on the icon to open the current backup file in *Storage Manager* on the *process watcher* window.
|
||||
|
||||
@@ -36,8 +36,8 @@ EOF
|
||||
fi
|
||||
|
||||
if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
|
||||
if [ -z "${PGADMIN_DEFAULT_EMAIL}" -o -z "${PGADMIN_DEFAULT_PASSWORD}" ]; then
|
||||
echo 'You need to define the PGADMIN_DEFAULT_EMAIL and PGADMIN_DEFAULT_PASSWORD environment variables.'
|
||||
if ([ -z "${PGADMIN_DEFAULT_EMAIL}" ]) || ( [ -z "${PGADMIN_DEFAULT_PASSWORD}" ] && [ ! -n "${PGADMIN_DEFAULT_PASSWORD_FILE}" ] ); then
|
||||
echo 'You need to define the PGADMIN_DEFAULT_EMAIL and PGADMIN_DEFAULT_PASSWORD or PGADMIN_DEFAULT_PASSWORD_FILE environment variables.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -47,6 +47,11 @@ if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Read secret contents
|
||||
if [ -n "${PGADMIN_DEFAULT_PASSWORD_FILE}" ]; then
|
||||
export PGADMIN_DEFAULT_PASSWORD=$(cat ${PGADMIN_DEFAULT_PASSWORD_FILE})
|
||||
fi
|
||||
|
||||
# Set the default username and password in a
|
||||
# backwards compatible way
|
||||
export PGADMIN_SETUP_EMAIL=${PGADMIN_DEFAULT_EMAIL}
|
||||
|
||||
@@ -128,7 +128,11 @@ _build_runtime() {
|
||||
# YARN END
|
||||
|
||||
# WGET:
|
||||
NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
# Comment out the below line as the latest version having some
|
||||
# problem https://github.com/nwjs/nw.js/issues/7902, so for the time being
|
||||
# hardcoded the version to 0.62.2
|
||||
# NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
NW_VERSION="0.62.2"
|
||||
|
||||
pushd "${BUILDROOT}" > /dev/null
|
||||
while true;do
|
||||
|
||||
@@ -33,7 +33,11 @@ _build_runtime() {
|
||||
# YARN END
|
||||
|
||||
# WGET:
|
||||
NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
# Comment out the below line as the latest version having some
|
||||
# problem https://github.com/nwjs/nw.js/issues/7902, so for the time being
|
||||
# hardcoded the version to 0.62.2
|
||||
# NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
NW_VERSION="0.62.2"
|
||||
|
||||
pushd "${BUILD_ROOT}" > /dev/null
|
||||
while true;do
|
||||
|
||||
@@ -5,18 +5,21 @@ if [ "$EUID" -ne 0 ]
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g' | awk -F "." '{ print $1 }')
|
||||
|
||||
# EPEL & other repos
|
||||
yum -y install centos-release-scl
|
||||
if [ ${OS_VERSION} != 9 ]; then
|
||||
yum -y install centos-release-scl
|
||||
fi
|
||||
|
||||
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-${OS_VERSION}.noarch.rpm
|
||||
if [ ${OS_VERSION} == 8 ]; then
|
||||
if [ ${OS_VERSION} == 8 ] || [ ${OS_VERSION} == 9 ]; then
|
||||
yum config-manager --enable PowerTools AppStream BaseOS *epel
|
||||
dnf -qy module disable postgresql
|
||||
fi
|
||||
|
||||
# PostgreSQL repo
|
||||
if [ ${OS_VERSION} == 7 ] || [ ${OS_VERSION} == 8 ]; then
|
||||
if [ ${OS_VERSION} == 7 ] || [ ${OS_VERSION} == 8 ] || [ ${OS_VERSION} == 9 ]; then
|
||||
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-${OS_VERSION}-x86_64/pgdg-redhat-repo-latest.noarch.rpm
|
||||
else
|
||||
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/F-${OS_VERSION}-x86_64/pgdg-fedora-repo-latest.noarch.rpm
|
||||
@@ -24,7 +27,7 @@ fi
|
||||
|
||||
# Node repo
|
||||
echo "Setting up the NodeJS repo..."
|
||||
curl -sL https://rpm.nodesource.com/setup_12.x | bash -
|
||||
curl -sL https://rpm.nodesource.com/setup_16.x | bash -
|
||||
|
||||
# Yarn repo
|
||||
echo "Setting up the Yarn repo..."
|
||||
@@ -37,6 +40,9 @@ yum groupinstall -y "Development Tools"
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
yum install -y expect fakeroot httpd-devel postgresql14-devel python3-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
pip3 install sphinx
|
||||
elif [ ${OS_VERSION} == 9 ]; then
|
||||
yum install -y expect postgresql14-devel python3-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
pip3 install sphinx
|
||||
else
|
||||
yum install -y expect fakeroot postgresql14-devel python3-devel python3-sphinx nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
fi
|
||||
|
||||
@@ -50,3 +50,7 @@ boto3==1.20.*
|
||||
botocore==1.23.*
|
||||
urllib3==1.26.*
|
||||
Werkzeug==2.0.3
|
||||
azure-mgmt-rdbms==10.1.0
|
||||
azure-mgmt-resource==21.0.0
|
||||
azure-mgmt-subscription==3.0.0
|
||||
azure-identity==1.9.0
|
||||
@@ -7,6 +7,7 @@
|
||||
"license": "PostgreSQL",
|
||||
"chromium-args": "--disable-popup-blocking --disable-gpu",
|
||||
"user-agent": "Nwjs:%nwver-%osinfo-%chromium_ver",
|
||||
"nodejs": true,
|
||||
"window": {
|
||||
"width": 750,
|
||||
"height": 600,
|
||||
@@ -24,7 +25,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^6.3.0",
|
||||
"nw": "^0.64.0"
|
||||
"nw": "0.62.2"
|
||||
},
|
||||
"scripts": {
|
||||
"linter": "yarn eslint --no-eslintrc -c .eslintrc.js --ext .js ."
|
||||
|
||||
@@ -296,7 +296,7 @@ const setZoomLevelForAllWindows = () => {
|
||||
for (let arr_val of winArray) {
|
||||
arr_val.zoomLevel = pgAdminWindowObject.zoomLevel;
|
||||
}
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
// This function used to zoom in the pgAdmin window.
|
||||
|
||||
@@ -18,6 +18,7 @@ let startPageUrl = null;
|
||||
let serverCheckUrl = null;
|
||||
|
||||
let serverPort = 5050;
|
||||
let appStartTime = (new Date()).getTime();
|
||||
|
||||
let docsURLSubStrings = ['www.enterprisedb.com', 'www.postgresql.org', 'www.pgadmin.org', 'help/help'];
|
||||
|
||||
@@ -84,12 +85,15 @@ function startDesktopMode() {
|
||||
misc.writeServerLog('--------------------------------------------------------\n');
|
||||
|
||||
// Spawn the process to start pgAdmin4 server.
|
||||
let spawnStartTime = (new Date).getTime();
|
||||
pgadminServerProcess = spawn(path.resolve(pythonPath), ['-s', path.resolve(pgadminFile)]);
|
||||
pgadminServerProcess.on('error', function(err) {
|
||||
// Log the error into the log file if process failed to launch
|
||||
misc.writeServerLog('Failed to launch pgAdmin4. Error:');
|
||||
misc.writeServerLog(err);
|
||||
});
|
||||
let spawnEndTime = (new Date).getTime();
|
||||
misc.writeServerLog('Total spawn time to start the pgAdmin4 server: ' + (spawnEndTime - spawnStartTime)/1000 + ' Sec');
|
||||
|
||||
pgadminServerProcess.stdout.setEncoding('utf8');
|
||||
pgadminServerProcess.stdout.on('data', (chunk) => {
|
||||
@@ -149,6 +153,7 @@ function startDesktopMode() {
|
||||
let pingInProgress = false;
|
||||
|
||||
// ping pgAdmin server every 1 second.
|
||||
let pingStartTime = (new Date).getTime();
|
||||
let intervalID = setInterval(function() {
|
||||
// If ping request is already send and response is not
|
||||
// received no need to send another request.
|
||||
@@ -162,6 +167,12 @@ function startDesktopMode() {
|
||||
misc.setProcessObject(pgadminServerProcess);
|
||||
|
||||
clearInterval(intervalID);
|
||||
let appEndTime = (new Date).getTime();
|
||||
misc.writeServerLog('------------------------------------------');
|
||||
misc.writeServerLog('Total time taken to ping pgAdmin4 server: ' + (appEndTime - pingStartTime)/1000 + ' Sec');
|
||||
misc.writeServerLog('------------------------------------------');
|
||||
misc.writeServerLog('Total launch time of pgAdmin4: ' + (appEndTime - appStartTime)/1000 + ' Sec');
|
||||
misc.writeServerLog('------------------------------------------');
|
||||
launchPgAdminWindow();
|
||||
}).catch(() => {
|
||||
pingInProgress = false;
|
||||
@@ -195,7 +206,7 @@ function startDesktopMode() {
|
||||
});
|
||||
|
||||
pingInProgress = true;
|
||||
}, 1000);
|
||||
}, 250);
|
||||
}
|
||||
|
||||
// This function is used to hide the splash screen and create/launch
|
||||
@@ -232,32 +243,32 @@ function launchPgAdminWindow() {
|
||||
// set up handler for new-win-policy event.
|
||||
// Set the width and height for the new window.
|
||||
pgadminWindow.on('new-win-policy', function(frame, url, policy) {
|
||||
if(!frame) {
|
||||
let openDocsInBrowser = misc.ConfigureStore.get('openDocsInBrowser', true);
|
||||
let isDocURL = false;
|
||||
docsURLSubStrings.forEach(function(key) {
|
||||
if(url.indexOf(key) >= 0) {
|
||||
isDocURL = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (openDocsInBrowser && isDocURL) {
|
||||
// Do not open the window
|
||||
policy.ignore();
|
||||
// Open URL in the external browser.
|
||||
nw.Shell.openExternal(url);
|
||||
} else {
|
||||
policy.setNewWindowManifest({
|
||||
'icon': '../../assets/pgAdmin4.png',
|
||||
'frame': true,
|
||||
'position': 'center',
|
||||
'min_width': 640,
|
||||
'min_height': 480,
|
||||
'width': pgadminWindow.width,
|
||||
'height': pgadminWindow.height,
|
||||
});
|
||||
if(!frame) {
|
||||
let openDocsInBrowser = misc.ConfigureStore.get('openDocsInBrowser', true);
|
||||
let isDocURL = false;
|
||||
docsURLSubStrings.forEach(function(key) {
|
||||
if(url.indexOf(key) >= 0) {
|
||||
isDocURL = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (openDocsInBrowser && isDocURL) {
|
||||
// Do not open the window
|
||||
policy.ignore();
|
||||
// Open URL in the external browser.
|
||||
nw.Shell.openExternal(url);
|
||||
} else {
|
||||
policy.setNewWindowManifest({
|
||||
'icon': '../../assets/pgAdmin4.png',
|
||||
'frame': true,
|
||||
'position': 'center',
|
||||
'min_width': 640,
|
||||
'min_height': 480,
|
||||
'width': pgadminWindow.width,
|
||||
'height': pgadminWindow.height,
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
pgadminWindow.on('loaded', function() {
|
||||
@@ -289,6 +300,24 @@ function launchPgAdminWindow() {
|
||||
let gui = require('nw.gui');
|
||||
let splashWindow = gui.Window.get();
|
||||
|
||||
// Enable dragging on the splash screen.
|
||||
let isDragging = false;
|
||||
let dragOrigin = {x:0, y:0};
|
||||
document.mouseleave = ()=> isDragging = false;
|
||||
document.onmouseup = ()=> isDragging = false;
|
||||
|
||||
document.onmousedown = (e)=> {
|
||||
isDragging = true;
|
||||
dragOrigin.x = e.x;
|
||||
dragOrigin.y = e.y;
|
||||
};
|
||||
|
||||
document.onmousemove = (e)=> {
|
||||
if (isDragging) {
|
||||
splashWindow.moveTo(e.screenX - dragOrigin.x, e.screenY - dragOrigin.y);
|
||||
}
|
||||
};
|
||||
|
||||
// Always clear the cache before starting the application.
|
||||
nw.App.clearCache();
|
||||
|
||||
|
||||
@@ -1008,10 +1008,10 @@ number-is-nan@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
|
||||
|
||||
nw@^0.64.0:
|
||||
version "0.64.1"
|
||||
resolved "https://registry.yarnpkg.com/nw/-/nw-0.64.1.tgz#eaf96dd22081a679316b86d31405a54b37ba7181"
|
||||
integrity sha512-+h1qQlhBdW56Xbe5EVojb2zfjo/fccM7rzecHTiNBl++FHA3nAGxn2UrwmqpUa+v/mQ5+EUFXpBlmkbl4y4fEg==
|
||||
nw@0.62.2:
|
||||
version "0.62.2"
|
||||
resolved "https://registry.yarnpkg.com/nw/-/nw-0.62.2.tgz#a00e3e3caac5dc80da6897cfc6ef2af942b5c0fa"
|
||||
integrity sha512-g9RNUUmumsMC75M5I5DGdPvszCEIefCHHZYOrMzpR6oQ6MrQmT29ejsBXBU5XVE2kfPJ5Eu9izvJTbc7uIqwgg==
|
||||
dependencies:
|
||||
chalk "~1.1.3"
|
||||
decompress "^4.2.0"
|
||||
|
||||
@@ -43,7 +43,7 @@ APP_ICON = 'pg-icon'
|
||||
|
||||
# Application version number components
|
||||
APP_RELEASE = 6
|
||||
APP_REVISION = 10
|
||||
APP_REVISION = 12
|
||||
|
||||
# Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string
|
||||
# for GA releases.
|
||||
@@ -52,7 +52,7 @@ APP_SUFFIX = ''
|
||||
# Numeric application version for upgrade checks. Should be in the format:
|
||||
# [X]XYYZZ, where X is the release version, Y is the revision, with a leading
|
||||
# zero if needed, and Z represents the suffix, with a leading zero if needed
|
||||
APP_VERSION_INT = 61000
|
||||
APP_VERSION_INT = 61200
|
||||
|
||||
# DO NOT CHANGE!
|
||||
# The application version string, constructed from the components
|
||||
@@ -690,6 +690,12 @@ KRB_AUTO_CREATE_USER = True
|
||||
|
||||
KERBEROS_CCACHE_DIR = os.path.join(DATA_DIR, 'krbccache')
|
||||
|
||||
#############################################################################
|
||||
# Create local directory to store azure credential cache
|
||||
#############################################################################
|
||||
|
||||
AZURE_CREDENTIAL_CACHE_DIR = os.path.join(DATA_DIR, 'azurecredentialcache')
|
||||
|
||||
##########################################################################
|
||||
# OAuth2 Configuration
|
||||
##########################################################################
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"@emotion/react": "^11.1.5",
|
||||
"@emotion/styled": "^10.0.14",
|
||||
"@emotion/utils": "^1.0.0",
|
||||
"@svgr/webpack": "^5.5.0",
|
||||
"@svgr/webpack": "^6.2.1",
|
||||
"@wojtekmaj/enzyme-adapter-react-17": "^0.4.1",
|
||||
"autoprefixer": "^10.2.4",
|
||||
"axios-mock-adapter": "^1.17.0",
|
||||
@@ -37,10 +37,6 @@
|
||||
"exports-loader": "^2.0.0",
|
||||
"html-react-parser": "^1.2.7",
|
||||
"image-minimizer-webpack-plugin": "^2.2.0",
|
||||
"imagemin-mozjpeg": "^9.0.0",
|
||||
"imagemin-optipng": "^8.0.0",
|
||||
"imagemin-pngquant": "^9.0.1",
|
||||
"imagemin-svgo": "^8.0.0",
|
||||
"is-docker": "^2.1.1",
|
||||
"istanbul-instrumenter-loader": "^3.0.1",
|
||||
"jasmine-core": "^3.6.0",
|
||||
@@ -74,7 +70,7 @@
|
||||
"webpack": "^5.21.2",
|
||||
"webpack-bundle-analyzer": "^4.4.0",
|
||||
"webpack-cli": "^4.5.0",
|
||||
"yarn-audit-html": "^2.0.0"
|
||||
"yarn-audit-html": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/plugin-proposal-class-properties": "^7.10.4",
|
||||
@@ -86,8 +82,6 @@
|
||||
"@material-ui/icons": "^4.11.2",
|
||||
"@material-ui/lab": "4.0.0-alpha.58",
|
||||
"@material-ui/pickers": "^3.2.10",
|
||||
"@mui/icons-material": "^5.4.2",
|
||||
"@mui/material": "^5.4.3",
|
||||
"@projectstorm/react-diagrams": "^6.6.1",
|
||||
"@simonwep/pickr": "^1.5.1",
|
||||
"@szhsin/react-menu": "^2.2.0",
|
||||
@@ -111,17 +105,18 @@
|
||||
"bootstrap4-toggle": "^3.6.1",
|
||||
"brace": "^0.11.1",
|
||||
"browserfs": "^1.4.3",
|
||||
"chart.js": "^2.9.3",
|
||||
"chart.js": "^3.0.0",
|
||||
"chartjs-plugin-zoom": "^1.2.1",
|
||||
"classnames": "^2.2.6",
|
||||
"closest": "^0.0.1",
|
||||
"codemirror": "^5.59.2",
|
||||
"context-menu": "^2.0.0",
|
||||
"convert-units": "^2.3.4",
|
||||
"css-loader": "^5.0.1",
|
||||
"cssnano": "^5.0.2",
|
||||
"dagre": "^0.8.4",
|
||||
"date-fns": "^2.24.0",
|
||||
"diff-arrays-of-objects": "^1.1.8",
|
||||
"dropzone": "^5.9.3",
|
||||
"html2canvas": "^1.0.0-rc.7",
|
||||
"immutability-helper": "^3.0.0",
|
||||
"imports-loader": "^2.0.0",
|
||||
@@ -129,7 +124,7 @@
|
||||
"ip-address": "^7.1.0",
|
||||
"jquery": "^3.6.0",
|
||||
"jquery-contextmenu": "^2.9.2",
|
||||
"jquery-ui": "^1.13.0",
|
||||
"jquery-ui": "^1.13.2",
|
||||
"json-bignumber": "^1.0.1",
|
||||
"jsoneditor": "^9.5.4",
|
||||
"jsoneditor-react": "^3.1.1",
|
||||
@@ -137,15 +132,15 @@
|
||||
"leaflet": "^1.5.1",
|
||||
"lodash": "4.*",
|
||||
"ml-matrix": "^6.5.0",
|
||||
"moment": "^2.29.3",
|
||||
"moment": "^2.29.4",
|
||||
"moment-timezone": "^0.5.34",
|
||||
"mousetrap": "^1.6.3",
|
||||
"notificar": "^1.0.1",
|
||||
"notistack": "^2.0.0",
|
||||
"notistack": "^1.0.10",
|
||||
"path-fx": "^2.0.0",
|
||||
"pathfinding": "^0.4.18",
|
||||
"paths-js": "^0.4.9",
|
||||
"pgadmin4-tree": "git+https://github.com/EnterpriseDB/pgadmin4-treeview/#b0287d39b54de28cb2a83f0c19a95ce823f6feae",
|
||||
"pgadmin4-tree": "git+https://github.com/EnterpriseDB/pgadmin4-treeview/#07cc449e1d89ecc8cce3679d8cff5a35f1db67ee",
|
||||
"postcss": "^8.2.15",
|
||||
"raf": "^3.4.1",
|
||||
"rc-dock": "^3.2.9",
|
||||
@@ -155,6 +150,7 @@
|
||||
"react-data-grid": "git+https://github.com/adityatoshniwal/react-data-grid.git/#8d9bc16ddd7c419acfbbd1c1cc2b70eb9f5b453c",
|
||||
"react-dom": "^17.0.1",
|
||||
"react-draggable": "^4.4.4",
|
||||
"react-dropzone": "^14.2.1",
|
||||
"react-leaflet": "^3.2.2",
|
||||
"react-rnd": "^10.3.5",
|
||||
"react-router-dom": "^6.2.2",
|
||||
@@ -170,7 +166,6 @@
|
||||
"socket.io-client": "^4.0.0",
|
||||
"split.js": "^1.5.10",
|
||||
"styled-components": "^5.2.1",
|
||||
"tablesorter": "^2.31.2",
|
||||
"tempusdominus-bootstrap-4": "^5.1.2",
|
||||
"tempusdominus-core": "^5.19.3",
|
||||
"underscore": "^1.13.1",
|
||||
|
||||
@@ -14,7 +14,6 @@ to start a web server."""
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
if sys.version_info < (3, 4):
|
||||
raise RuntimeError('This application must be run under Python 3.4 '
|
||||
'or later.')
|
||||
@@ -37,8 +36,8 @@ else:
|
||||
builtins.SERVER_MODE = None
|
||||
|
||||
import config
|
||||
import setup
|
||||
from pgadmin import create_app, socketio
|
||||
from pgadmin.utils import u_encode, fs_encoding, file_quote
|
||||
from pgadmin.utils.constants import INTERNAL
|
||||
# Get the config database schema version. We store this in pgadmin.model
|
||||
# as it turns out that putting it in the config files isn't a great idea
|
||||
@@ -83,13 +82,9 @@ class ReverseProxied(object):
|
||||
config.SETTINGS_SCHEMA_VERSION = SCHEMA_VERSION
|
||||
|
||||
# Check if the database exists. If it does not, create it.
|
||||
setup_db_required = False
|
||||
if not os.path.isfile(config.SQLITE_PATH):
|
||||
setup_py = os.path.join(
|
||||
os.path.dirname(os.path.realpath(u_encode(__file__, fs_encoding))),
|
||||
'setup.py'
|
||||
)
|
||||
exec(open(file_quote(setup_py), 'r').read())
|
||||
|
||||
setup_db_required = True
|
||||
|
||||
##########################################################################
|
||||
# Create the app and configure it. It is created outside main so that
|
||||
@@ -99,6 +94,9 @@ app = create_app()
|
||||
app.debug = False
|
||||
app.config['sessions'] = dict()
|
||||
|
||||
if setup_db_required:
|
||||
setup.setup_db(app)
|
||||
|
||||
if config.SERVER_MODE:
|
||||
app.wsgi_app = ReverseProxied(app.wsgi_app)
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def load_providers():
|
||||
@@ -19,7 +20,7 @@ def load_providers():
|
||||
|
||||
path = os.path.dirname(os.path.realpath(__file__))
|
||||
modules = os.listdir(path + '/providers')
|
||||
|
||||
sys.path.append(path)
|
||||
for filename in modules:
|
||||
filename = path + '/providers/' + filename
|
||||
|
||||
|
||||
@@ -0,0 +1,361 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
""" Azure PostgreSQL provider """
|
||||
from azure.mgmt.rdbms.postgresql_flexibleservers import \
|
||||
PostgreSQLManagementClient
|
||||
from azure.mgmt.rdbms.postgresql_flexibleservers.models import Sku, SkuTier, \
|
||||
CreateMode, Storage, Server, FirewallRule, HighAvailability
|
||||
from azure.identity import AzureCliCredential, DeviceCodeCredential, \
|
||||
AuthenticationRecord
|
||||
from azure.mgmt.resource import ResourceManagementClient
|
||||
from azure.core.exceptions import ResourceNotFoundError
|
||||
from providers._abstract import AbsProvider
|
||||
import os
|
||||
from utils.io import debug, error, output
|
||||
from utils.misc import get_my_ip, get_random_id
|
||||
import sys
|
||||
CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))
|
||||
root = os.path.dirname(os.path.dirname(CURRENT_PATH))
|
||||
sys.path.insert(0, root)
|
||||
from pgadmin.misc.cloud.azure.azure_cache import load_persistent_cache, \
|
||||
TokenCachePersistenceOptions
|
||||
|
||||
|
||||
class AzureProvider(AbsProvider):
|
||||
def __init__(self):
|
||||
self._clients = {}
|
||||
self._tenant_id = None
|
||||
self._client_id = None
|
||||
self._client_secret = None
|
||||
self._subscription_id = None
|
||||
self._default_region = None
|
||||
self._interactive_browser_credential = False
|
||||
self._available_capabilities = None
|
||||
self._credentials = None
|
||||
self._authentication_record_json = None
|
||||
self._cli_credentials = None
|
||||
self._azure_cred_cache_name = None
|
||||
self._azure_cred_cache_location = None
|
||||
|
||||
# Get the credentials
|
||||
if 'AUTHENTICATION_RECORD_JSON' in os.environ:
|
||||
self._authentication_record_json = os.environ[
|
||||
'AUTHENTICATION_RECORD_JSON']
|
||||
|
||||
if 'AZURE_SUBSCRIPTION_ID' in os.environ:
|
||||
self._subscription_id = os.environ['AZURE_SUBSCRIPTION_ID']
|
||||
|
||||
if 'AZURE_TENANT_ID' in os.environ:
|
||||
self._tenant_id = os.environ['AZURE_TENANT_ID']
|
||||
|
||||
if 'AUTH_TYPE' in os.environ:
|
||||
self._interactive_browser_credential = False \
|
||||
if os.environ['AUTH_TYPE'] == 'azure_cli_credential' else True
|
||||
|
||||
if 'AZURE_DATABASE_PASSWORD' in os.environ:
|
||||
self._database_pass = os.environ['AZURE_DATABASE_PASSWORD']
|
||||
|
||||
if 'AZURE_CRED_CACHE_NAME' in os.environ:
|
||||
self._azure_cred_cache_name = os.environ['AZURE_CRED_CACHE_NAME']
|
||||
|
||||
if 'AZURE_CRED_CACHE_LOCATION' in os.environ:
|
||||
self._azure_cred_cache_location = \
|
||||
os.environ['AZURE_CRED_CACHE_LOCATION']
|
||||
|
||||
def init_args(self, parsers):
|
||||
""" Create the command line parser for this provider """
|
||||
self.parser = parsers. \
|
||||
add_parser('azure',
|
||||
help='Azure Database for PostgreSQL',
|
||||
epilog='Credentials are read from '
|
||||
'the environment, '
|
||||
'specifically, the '
|
||||
'AZURE_SUBSCRIPTION_ID, '
|
||||
'AZURE_TENANT_ID, '
|
||||
'AZURE_CLIENT_ID and '
|
||||
'AZURE_CLIENT_SECRET '
|
||||
'variables. '
|
||||
'See https://docs.microsoft'
|
||||
'.com/en-us/azure/developer'
|
||||
'/python/configure-local'
|
||||
'-development-environment?tabs=cmd '
|
||||
'for more information.')
|
||||
|
||||
self.parser.add_argument('--region', default=self._default_region,
|
||||
help='name of the Azure location (default: '
|
||||
'{})'.format(self._default_region))
|
||||
|
||||
self.parser.add_argument('--resource-group', required=True,
|
||||
help='name of the Azure resource group')
|
||||
|
||||
# Create the command sub-parser
|
||||
parsers = self.parser.add_subparsers(help='Azure commands',
|
||||
dest='command')
|
||||
|
||||
# Create the create instance command parser
|
||||
parser_create_instance = parsers.add_parser('create-instance',
|
||||
help='create a new '
|
||||
'instance')
|
||||
|
||||
parser_create_instance.add_argument('--name', required=True,
|
||||
help='name of the instance')
|
||||
parser_create_instance.add_argument('--db-password', required=False,
|
||||
help='password for the database')
|
||||
parser_create_instance.add_argument('--db-username',
|
||||
default='postgres',
|
||||
help='user name for the database '
|
||||
'(default: postgres)')
|
||||
parser_create_instance.add_argument('--db-major-version',
|
||||
default='11',
|
||||
help='version of PostgreSQL '
|
||||
'to deploy (default: 11)')
|
||||
parser_create_instance.add_argument('--instance-type', required=True,
|
||||
help='machine type for the '
|
||||
'instance nodes, e.g. '
|
||||
'GP_Gen5_8')
|
||||
parser_create_instance.add_argument('--instance_tier_type',
|
||||
required=True,
|
||||
help='machine type for the '
|
||||
'instance nodes, e.g. '
|
||||
'GP_Gen5_8')
|
||||
parser_create_instance.add_argument('--storage-size', type=int,
|
||||
required=True,
|
||||
help='storage size in GB')
|
||||
parser_create_instance.add_argument('--availability-zone',
|
||||
required=False,
|
||||
help='Availability zone')
|
||||
parser_create_instance.add_argument('--high-availability',
|
||||
required=False,
|
||||
help='High Availability')
|
||||
parser_create_instance.add_argument('--public-ips',
|
||||
default='127.0.0.1',
|
||||
help='Public IPs '
|
||||
'(default: 127.0.0.1)')
|
||||
|
||||
# Create the delete instance command parser
|
||||
parser_delete_instance = parsers.add_parser('delete-instance',
|
||||
help='delete an instance')
|
||||
parser_delete_instance.add_argument('--name', required=True,
|
||||
help='name of the instance')
|
||||
|
||||
##########################################################################
|
||||
# Azure Helper functions
|
||||
##########################################################################
|
||||
def _get_azure_credentials(self):
|
||||
try:
|
||||
if self._interactive_browser_credential:
|
||||
_credentials = self._azure_interactive_auth()
|
||||
else:
|
||||
_credentials = self._azure_cli_auth()
|
||||
except Exception as e:
|
||||
return False, str(e)
|
||||
return True, _credentials
|
||||
|
||||
def _azure_cli_auth(self):
|
||||
if self._cli_credentials is None:
|
||||
self._cli_credentials = AzureCliCredential()
|
||||
return self._cli_credentials
|
||||
|
||||
def _azure_interactive_auth(self):
|
||||
if self._authentication_record_json is None:
|
||||
_interactive_credential = DeviceCodeCredential(
|
||||
tenant_id=self._tenant_id,
|
||||
timeout=180,
|
||||
prompt_callback=None,
|
||||
_cache=load_persistent_cache(TokenCachePersistenceOptions(
|
||||
name=self._azure_cred_cache_name,
|
||||
allow_unencrypted_storage=True,
|
||||
cache_location=self._azure_cred_cache_location)
|
||||
)
|
||||
)
|
||||
_auth_record = _interactive_credential.authenticate()
|
||||
self._authentication_record_json = _auth_record.serialize()
|
||||
else:
|
||||
deserialized_auth_record = AuthenticationRecord.deserialize(
|
||||
self._authentication_record_json)
|
||||
_interactive_credential = DeviceCodeCredential(
|
||||
tenant_id=self._tenant_id,
|
||||
timeout=180,
|
||||
prompt_callback=None,
|
||||
_cache=load_persistent_cache(TokenCachePersistenceOptions(
|
||||
name=self._azure_cred_cache_name,
|
||||
allow_unencrypted_storage=True,
|
||||
cache_location=self._azure_cred_cache_location)
|
||||
),
|
||||
authentication_record=deserialized_auth_record
|
||||
)
|
||||
return _interactive_credential
|
||||
|
||||
def _get_azure_client(self, type):
|
||||
""" Create/cache/return an Azure client object """
|
||||
# Acquire a credential object using CLI-based authentication.
|
||||
if self._credentials is None:
|
||||
status, self._credentials = \
|
||||
self._get_azure_credentials()
|
||||
|
||||
if type in self._clients:
|
||||
return self._clients[type]
|
||||
|
||||
self._clients['postgresql'] = PostgreSQLManagementClient(
|
||||
self._credentials, self._subscription_id)
|
||||
self._clients['resource'] = ResourceManagementClient(
|
||||
self._credentials, self._subscription_id)
|
||||
|
||||
return self._clients[type]
|
||||
|
||||
def _create_resource_group(self, args):
|
||||
""" Create the Resource Group if it doesn't exist """
|
||||
resource_client = self._get_azure_client('resource')
|
||||
|
||||
group_list = resource_client.resource_groups.list()
|
||||
for group in list(group_list):
|
||||
if group.name == args.resource_group:
|
||||
debug('Resource group already exist with name: {}...'.format(
|
||||
args.resource_group))
|
||||
return group.__dict__
|
||||
debug(
|
||||
'Creating resource group with name: {}...'.format(
|
||||
args.resource_group))
|
||||
result = resource_client.resource_groups.create_or_update(
|
||||
args.resource_group,
|
||||
{"location": args.region})
|
||||
return result.__dict__
|
||||
|
||||
def _create_azure_instance(self, args):
|
||||
""" Create an Azure instance """
|
||||
# Obtain the management client object
|
||||
postgresql_client = self._get_azure_client('postgresql')
|
||||
# Check if the server already exists
|
||||
svr = None
|
||||
try:
|
||||
svr = postgresql_client.servers.get(args.resource_group, args.name)
|
||||
except ResourceNotFoundError:
|
||||
pass
|
||||
except Exception as e:
|
||||
error(args, e)
|
||||
|
||||
if svr is not None:
|
||||
error(args, 'Azure Database for PostgreSQL instance {} already '
|
||||
'exists.'.format(args.name))
|
||||
|
||||
db_password = self._database_pass if self._database_pass is not None \
|
||||
else args.db_password
|
||||
|
||||
# Provision the server and wait for the result
|
||||
debug('Creating Azure instance: {}...'.format(args.name))
|
||||
|
||||
try:
|
||||
poller = postgresql_client.servers.begin_create(
|
||||
resource_group_name=args.resource_group,
|
||||
server_name=args.name,
|
||||
parameters=Server(
|
||||
|
||||
sku=Sku(name=args.instance_type,
|
||||
tier=SkuTier(args.instance_tier_type)
|
||||
),
|
||||
high_availability=HighAvailability(
|
||||
mode=args.high_availability),
|
||||
administrator_login=args.db_username,
|
||||
administrator_login_password=db_password,
|
||||
version=args.db_major_version,
|
||||
storage=Storage(
|
||||
storage_size_gb=args.storage_size
|
||||
),
|
||||
location=args.region,
|
||||
create_mode=CreateMode("Default")
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
error(e)
|
||||
|
||||
server = poller.result()
|
||||
|
||||
return server.__dict__
|
||||
|
||||
def _create_firewall_rule(self, args):
|
||||
""" Create a firewall rule on an instance """
|
||||
firewall_rules = []
|
||||
postgresql_client = self._get_azure_client('postgresql')
|
||||
ip = args.public_ips if args.public_ips else get_my_ip()
|
||||
ip_list = ip.split(',')
|
||||
for ip in ip_list:
|
||||
ip = ip.strip()
|
||||
if '-' in ip:
|
||||
start_ip = ip.split('-')[0]
|
||||
end_ip = ip.split('-')[1]
|
||||
else:
|
||||
start_ip = ip
|
||||
end_ip = ip
|
||||
name = 'pgacloud_{}_{}_{}'.format(args.name,
|
||||
ip.replace('.', '-'),
|
||||
get_random_id())
|
||||
|
||||
# Provision the rule and wait for completion
|
||||
debug('Adding ingress rule for: {0} - {1} ...'.format(start_ip,
|
||||
end_ip))
|
||||
poller = postgresql_client.firewall_rules.begin_create_or_update(
|
||||
resource_group_name=args.resource_group,
|
||||
server_name=args.name,
|
||||
firewall_rule_name=name,
|
||||
parameters=FirewallRule(start_ip_address=start_ip,
|
||||
end_ip_address=end_ip)
|
||||
)
|
||||
|
||||
firewall_rule = poller.result()
|
||||
|
||||
firewall_rules.append(firewall_rule.__dict__)
|
||||
return firewall_rules
|
||||
|
||||
def _delete_azure_instance(self, args, name):
|
||||
""" Delete an Azure instance """
|
||||
# Obtain the management client object
|
||||
postgresql_client = self._get_azure_client('postgresql')
|
||||
|
||||
# Delete the server and wait for the result
|
||||
debug('Deleting Azure instance: {}...'.format(args.name))
|
||||
try:
|
||||
poller = postgresql_client.servers.begin_delete(
|
||||
args.resource_group,
|
||||
args.name
|
||||
)
|
||||
except Exception as e:
|
||||
error(args, e)
|
||||
|
||||
poller.result()
|
||||
|
||||
##########################################################################
|
||||
# User commands
|
||||
##########################################################################
|
||||
def cmd_create_instance(self, args):
|
||||
""" Deploy an Azure instance and firewall rule """
|
||||
rg = self._create_resource_group(args)
|
||||
instance = self._create_azure_instance(args)
|
||||
self._create_firewall_rule(args)
|
||||
|
||||
data = {'instance': {
|
||||
'Id': instance['id'],
|
||||
'ResourceGroupId': rg['name'],
|
||||
'Location': instance['location'],
|
||||
'Hostname': instance['fully_qualified_domain_name'],
|
||||
'Port': 5432,
|
||||
'Database': "postgres",
|
||||
'Username': instance['administrator_login']
|
||||
}}
|
||||
|
||||
output(data)
|
||||
|
||||
def cmd_delete_instance(self, args):
|
||||
""" Delete an Azure instance """
|
||||
self._delete_azure_instance(args, args.name)
|
||||
|
||||
|
||||
def load():
|
||||
""" Loads the current provider """
|
||||
return AzureProvider()
|
||||