Metatron-discovery: change the connection icon to use static resources

Created on 5 Mar 2019  ยท  8Comments  ยท  Source: metatron-app/metatron-discovery

Is your feature request related to a problem? Please describe.
To extend the data connection later, change the connection icon to use static resources.
Also add an icon for the DB below.

  • DB
    redshift, oracle, tibero

And we need to define icon size for each usage.

  1. Data conenction create
  2. Workbench LNB
  3. Schema Browser
  4. Worspace

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

@datasource

All 8 comments

@koeun222
oracle, tibero์— ๋Œ€ํ•œ ์•„์ด์ฝ˜ ์ „๋‹ฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@eltriny
์ถ”ํ›„ ์ถ”๊ฐ€๋  ์ปค๋„ฅ์…˜ ์ •๋ณด api์˜ response sample ๋ณด๋‚ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.
scope : ์ž„๋ฒ ๋“œ, ์ต์Šคํ…์…˜
name : ์ปค๋„ฅ์…˜ ํƒ€์ž…๋ช…
implementor : ์ปค๋„ฅ์…˜ ๊ตฌ๋ถ„์ž
iconResource1, iconResource2, iconResource3, iconResource4 : icon static resource ๊ฒฝ๋กœ
-- ์šฐ์„  4๊ฐ€์ง€ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ–ˆ๋Š”๋ฐ์š”. ํ˜„์žฌ ์•„์ด์ฝ˜์€ ๋ช‡๊ฐ€์ง€ ์œ ํ˜•์„ ์‚ฌ์šฉ์ค‘์ธ๊ฐ€์š”?

inputSpec : ์ปค๋„ฅ์…˜ ์ƒ์„ฑ์‹œ ํ•„์ˆ˜๊ฐ’ ์—ฌ๋ถ€์— ๋Œ€ํ•œ spec
-- ์šฐ์„  authenticationType, database, sid, catalog 4๊ฐ€์ง€ ์†์„ฑ์— ๋Œ€ํ•ด ๋…ธ์ถœํ• ์ง€์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

[
   {
      "scope":"EMBEDDED",
      "name":"Hive",
      "inputSpec":{
         "implementor":"MANDATORY",
         "authenticationType":"MANDATORY",
         "url":"OPTIONAL",
         "options":"OPTIONAL",
         "hostname":"OPTIONAL",
         "port":"OPTIONAL",
         "database":"NONE",
         "sid":"NONE",
         "catalog":"NONE",
         "properties":"OPTIONAL",
         "username":"OPTIONAL",
         "password":"OPTIONAL"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"HIVE",
      "iconResource2":null,
      "iconResource1":null
   },
   {
      "scope":"EMBEDDED",
      "name":"MySQL",
      "inputSpec":{
         "implementor":"MANDATORY",
         "authenticationType":"MANDATORY",
         "url":"OPTIONAL",
         "options":"OPTIONAL",
         "hostname":"OPTIONAL",
         "port":"OPTIONAL",
         "database":"NONE",
         "sid":"NONE",
         "catalog":"NONE",
         "properties":"OPTIONAL",
         "username":"OPTIONAL",
         "password":"OPTIONAL"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"MYSQL",
      "iconResource2":null,
      "iconResource1":null
   },
   {
      "scope":"EMBEDDED",
      "name":"Presto",
      "inputSpec":{
         "implementor":"MANDATORY",
         "authenticationType":"MANDATORY",
         "url":"OPTIONAL",
         "options":"OPTIONAL",
         "hostname":"OPTIONAL",
         "port":"OPTIONAL",
         "database":"NONE",
         "sid":"NONE",
         "catalog":"MANDATORY",
         "properties":"OPTIONAL",
         "username":"OPTIONAL",
         "password":"OPTIONAL"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"PRESTO",
      "iconResource2":null,
      "iconResource1":null
   },
   {
      "scope":"EMBEDDED",
      "name":"PostgreSQL",
      "inputSpec":{
         "implementor":"MANDATORY",
         "authenticationType":"MANDATORY",
         "url":"OPTIONAL",
         "options":"OPTIONAL",
         "hostname":"OPTIONAL",
         "port":"OPTIONAL",
         "database":"MANDATORY",
         "sid":"NONE",
         "catalog":"NONE",
         "properties":"OPTIONAL",
         "username":"OPTIONAL",
         "password":"OPTIONAL"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"POSTGRESQL",
      "iconResource2":null,
      "iconResource1":null
   },
   {
      "scope":"EMBEDDED",
      "name":"Druid",
      "inputSpec":{
         "implementor":"MANDATORY",
         "authenticationType":"NONE",
         "url":"OPTIONAL",
         "options":"OPTIONAL",
         "hostname":"OPTIONAL",
         "port":"OPTIONAL",
         "database":"NONE",
         "sid":"NONE",
         "catalog":"NONE",
         "properties":"OPTIONAL",
         "username":"NONE",
         "password":"NONE"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"DRUID",
      "iconResource2":null,
      "iconResource1":null
   },
   {
      "scope":"EXTENSION",
      "name":"Tibero",
      "inputSpec":{
         "implementor":"MANDATORY",
         "authenticationType":"MANDATORY",
         "url":"OPTIONAL",
         "options":"OPTIONAL",
         "hostname":"OPTIONAL",
         "port":"OPTIONAL",
         "database":"NONE",
         "sid":"MANDATORY",
         "catalog":"NONE",
         "properties":"OPTIONAL",
         "username":"OPTIONAL",
         "password":"OPTIONAL"
      },
      "iconResource4":"/resources/jdbc/icon4.png",
      "iconResource3":"/resources/jdbc/icon3.png",
      "implementor":"TIBERO",
      "iconResource2":"/resources/jdbc/icon1.png",
      "iconResource1":"/resources/jdbc/icon1.png"
   }
]

oracle, tibero์— ๋Œ€ํ•œ ์•„์ด์ฝ˜ ์ „๋‹ฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@ufoscw ์œ„ ์•„์ด์ฝ˜ ๊ธฐ์กด์— ํผ๋ธ”๋กœ ์ „๋‹ฌํ•˜์˜€์—ˆ์Šต๋‹ˆ๋‹ค- (์ด๊ณณ์œผ๋กœ ์ „๋‹ฌ ํ•„์š”ํ•˜์‹œ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”)
์ฐธ๊ณ ๋กœ DB ํƒ€์ž…๊ด€๋ จ ์ „๋‹ฌ๋œ ์•„์ด์ฝ˜ ์•„๋ž˜ ์ด๋ฏธ์ง€๋กœ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค
image

@eltriny
Oracle๊ณผ Tibero ์•„์ด์ฝ˜ ์ €ํ•œํ…Œ ์ „๋‹ฌ ๋ถ€ํƒ๋“œ๋ ค์š”.

@ufoscw ์ž‘์—…์ค‘ ๋ฌธ์˜๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Q1. inputSpec ํ”„๋กœํผํ‹ฐ๋“ค์˜ value๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋งŒ ์กด์žฌํ•˜๋‚˜์š”?

MANDATORY = ํ•„์ˆ˜๊ฐ’
OPTIONAL = ์˜ต์…˜ (๋ณดํ†ต URL ์„ ํƒ ํ•ด์ œ์‹œ ์‚ฌ์šฉ)
NONE = ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

Q2. PostgreSQL์— ๋Œ€ํ•ด ๋ฌธ์˜์ž…๋‹ˆ๋‹ค.

{
      "scope":"EMBEDDED",
      "name":"PostgreSQL",
      "inputSpec":{
         "implementor":"MANDATORY",
         "authenticationType":"MANDATORY",
         "url":"OPTIONAL",
         "options":"OPTIONAL",
         "hostname":"OPTIONAL",
         "port":"OPTIONAL",
         "database":"MANDATORY",
         "sid":"NONE",
         "catalog":"NONE",
         "properties":"OPTIONAL",
         "username":"OPTIONAL",
         "password":"OPTIONAL"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"POSTGRESQL",
      "iconResource2":null,
      "iconResource1":null
   },

์œ„์—์„œ database๊ฐ€ MANDATORY๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ ํ˜„์žฌ ํ™”๋ฉด์—์„œ๋Š”
์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œ๊ธฐ๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2019-03-20 แ„‹แ…ฉแ„’แ…ฎ 8 58 34
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2019-03-20 แ„‹แ…ฉแ„’แ…ฎ 8 58 37
์ด๋Ÿฌ๋ฉด database๊ฐ€ OPTIONAL๋กœ ํ‘œ๊ธฐ๋˜์–ด์•ผ ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€์š”?

Q3. DRUID์—์„œ authenticationType๊ฐ€ NONE์œผ๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ์š”
๊ทธ๋Ÿฌ๋ฉด ์ƒ์„ฑ์‹œ์— authenticationType ๊ฐ’ ์ž์ฒด๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š์•„์•ผ๋˜๋‚˜์š”?

@brandon-wonjune
Q1 : input ์š”์†Œ๋“ค๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ spec์œผ๋กœ ์ •์˜ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•ด์งˆ๊ฒƒ ๊ฐ™๋„ค์š”.
์กฐ๊ธˆ ๋‹จ์ˆœํ•˜๊ฒŒ ์ž‘์—…ํ•˜๋Š”๊ฒŒ ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
inputSpec ์ ์šฉ ๋Œ€์ƒ์€ database, sid, catalog, username, password, authenticationType ๋งŒ์œผ๋กœ ์ •์˜ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
host, port, url, properties๋Š” ํ•ญ์ƒ ๋…ธ์ถœํ•˜๋„๋ก ํ•˜๋ฉฐ host, port <-> url์€ ์–‘์žํƒ์ผ์˜ ๊ธฐ์กด ๋กœ์ง์„ ์œ ์ง€ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

value๋Š” ์•„๋ž˜๊ฐ’๋งŒ ์กด์žฌํ•˜๋ฉฐ ๊ฐ๊ฐ์˜ ์˜๋ฏธ๋Š”
MANDATORY = ํ™”๋ฉด ๋…ธ์ถœ O, ํ•„์ˆ˜๊ฐ’ ์ฒดํฌ O
OPTIONAL = ํ™”๋ฉด ๋…ธ์ถœ O, ํ•„์ˆ˜๊ฐ’ ์ฒดํฌ X
NONE = ํ™”๋ฉด ๋…ธ์ถœ X, ํ•„์ˆ˜๊ฐ’ ์ฒดํฌ X

  • Sample
[
   {
      "scope":"EMBEDDED",
      "name":"Hive",
      "inputSpec":{
         "authenticationType":"MANDATORY",
         "database":"NONE",
         "sid":"NONE",
         "catalog":"NONE",
         "username":"MANDATORY",
         "password":"MANDATORY"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"HIVE",
      "iconResource2":null,
      "iconResource1":null
   },
   {
      "scope":"EMBEDDED",
      "name":"MySQL",
      "inputSpec":{
         "authenticationType":"MANDATORY",
         "database":"NONE",
         "sid":"NONE",
         "catalog":"NONE",
         "username":"MANDATORY",
         "password":"MANDATORY"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"MYSQL",
      "iconResource2":null,
      "iconResource1":null
   },
   {
      "scope":"EMBEDDED",
      "name":"Presto",
      "inputSpec":{
         "authenticationType":"MANDATORY",
         "database":"NONE",
         "sid":"NONE",
         "catalog":"MANDATORY",
         "username":"MANDATORY",
         "password":"MANDATORY"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"PRESTO",
      "iconResource2":null,
      "iconResource1":null
   },
   {
      "scope":"EMBEDDED",
      "name":"PostgreSQL",
      "inputSpec":{
         "authenticationType":"MANDATORY",
         "database":"MANDATORY",
         "sid":"NONE",
         "catalog":"NONE",
         "username":"MANDATORY",
         "password":"MANDATORY"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"POSTGRESQL",
      "iconResource2":null,
      "iconResource1":null
   },
   {
      "scope":"EMBEDDED",
      "name":"Druid",
      "inputSpec":{
         "authenticationType":"NONE",
         "database":"NONE",
         "sid":"NONE",
         "catalog":"NONE",
         "username":"NONE",
         "password":"NONE"
      },
      "iconResource4":null,
      "iconResource3":null,
      "implementor":"DRUID",
      "iconResource2":null,
      "iconResource1":null
   },
   {
      "scope":"EXTENSION",
      "name":"Tibero",
      "inputSpec":{
         "authenticationType":"MANDATORY",
         "database":"NONE",
         "sid":"MANDATORY",
         "catalog":"NONE",
         "username":"MANDATORY",
         "password":"MANDATORY"
      },
      "iconResource4":"/resources/jdbc/icon4.png",
      "iconResource3":"/resources/jdbc/icon3.png",
      "implementor":"TIBERO",
      "iconResource2":"/resources/jdbc/icon1.png",
      "iconResource1":"/resources/jdbc/icon1.png"
   }
]

Q2. "URL๋งŒ" ์ฒดํฌ์‹œ์—๋Š” host, port, sid, catalog, database ๋Š” ํ•„์ˆ˜๊ฐ’ ์ฒดํฌ ๋กœ์ง ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•ด์ฃผ์„ธ์š”. ๊ธฐ์กด ๋กœ์ง ๊ทธ๋Œ€๋กœ ์ ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Q3. ๊ธฐ๋ณธ๊ฐ’์ธ MANUAL๋กœ ๋„˜๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@brandon-wonjune

  1. ์ดํ›„ ์ž‘์—…์€ https://github.com/metatron-app/metatron-discovery/tree/f%231295-apply_pf4j_framework ๋ธŒ๋žœ์น˜์—์„œ ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
    https://github.com/metatron-app/metatron-discovery/commit/581504577964609fd19e5a4caae8330dc90d07f4 ์ปค๋ฐ‹์€ ์œ„ ๋ธŒ๋žœ์น˜๋กœ ์ฒด๋ฆฌํ”ฝ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  1. ์œ„ ๋ธŒ๋žœ์น˜์— extension connection์ด ํฌํ•จ๋œ API๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
(GET) /api/extensions/connection
  1. ์›Œํฌ๋ฒค์น˜ ํ…Œ์ด๋ธ” ๋ชฉ๋ก API ์š”์ฒญ์‹œ sid ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ˆ„๋ฝ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ๋ฐ”๋ž๋‹ˆ๋‹ค.

@brandon-wonjune
์›Œํฌ๋ฒค์น˜์™€ ์ปค๋„ฅ์…˜ ์ƒ์„ฑ, ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ ์‚ฌ์šฉํ•  ์˜ค๋ผํด, ํ‹ฐ๋ฒ ๋กœ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ €ํ•œํ…Œ ์ „๋‹ฌ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@brandon-wonjune
์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ์ด์Šˆ๋ฒˆํ˜ธ๋Š” #1295 ๋กœ ํ†ต์ผํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Was this page helpful?
0 / 5 - 0 ratings