Skip to content

Commit 61fb9f0

Browse files
authored
Merge pull request #19 from cloudblue/feature/LITE-27143
LITE-27143 Helpdesk Cases are automatically resolved in Admin API
2 parents c420636 + 0faac41 commit 61fb9f0

14 files changed

+129
-47
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@
1515
* `ui-` for ones imported from Connect UI Toolkit
1616
* Table columns now may be styled directly with a column descriptor `style` property
1717
* 0.2.3: Better handling of DB and Client Server errors
18-
* 0.3.0: Administrative UI
18+
* 0.3.0: Administrative UI
19+
* 0.3.1: Helpdesk Cases are automatically resolved in administrative actions

dbaas/extension.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"name": "DBaaS",
33
"description": "On-demand provisioning of cloud-based database storages as a service.",
4-
"version": "0.3.0",
4+
"version": "0.3.1",
55
"audience": ["reseller", "distributor", "vendor"],
6-
"readme_url": "https://github.com/cloudblue/connect-extension-dbaas/blob/0.3.0/README.md",
7-
"changelog_url": "https://github.com/cloudblue/connect-extension-dbaas/blob/0.3.0/CHANGELOG.md",
6+
"readme_url": "https://github.com/cloudblue/connect-extension-dbaas/blob/0.3.1/README.md",
7+
"changelog_url": "https://github.com/cloudblue/connect-extension-dbaas/blob/0.3.1/CHANGELOG.md",
88
"icon": "googleExtensionBaseline"
99
}

dbaas/services.py

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# All rights reserved.
55
#
66

7+
import asyncio
78
import random
89
import string
910
from copy import copy
@@ -107,6 +108,7 @@ async def delete(
107108
cls,
108109
db_document: dict,
109110
db: AsyncIOMotorDatabase,
111+
client: AsyncConnectClient,
110112
**kwargs,
111113
) -> dict:
112114
updated_db_document = copy(db_document)
@@ -121,8 +123,10 @@ async def delete(
121123
{'id': db_document['id']},
122124
{'$set': updates},
123125
)
124-
125126
updated_db_document.update(updates)
127+
128+
cls._resolve_last_db_document_case(db_document, client)
129+
126130
return cls._db_document_repr(updated_db_document)
127131

128132
@classmethod
@@ -181,9 +185,10 @@ async def activate(
181185
data: dict,
182186
db: AsyncIOMotorDatabase,
183187
config: dict,
188+
client: AsyncConnectClient,
184189
**kwargs,
185190
) -> dict:
186-
updated_db_document = await cls._activate(db_document, data, db, config)
191+
updated_db_document = await cls._activate(db_document, data, db, config, client)
187192

188193
return cls._db_document_repr(updated_db_document, config=config)
189194

@@ -194,6 +199,7 @@ async def _activate(
194199
data: dict,
195200
db: AsyncIOMotorDatabase,
196201
config: dict,
202+
client: AsyncConnectClient,
197203
):
198204
status = db_document.get('status')
199205
credentials = data.get('credentials')
@@ -226,8 +232,10 @@ async def _activate(
226232
{'id': db_document['id']},
227233
{'$set': updates},
228234
)
229-
230235
updated_db_document.update(updates)
236+
237+
cls._resolve_last_db_document_case(db_document, client)
238+
231239
return updated_db_document
232240

233241
@classmethod
@@ -272,6 +280,12 @@ async def _update(
272280
updated_db_document.update(updates)
273281
return updated_db_document
274282

283+
@classmethod
284+
def _resolve_last_db_document_case(cls, db_document: dict, client: AsyncConnectClient):
285+
case = cls._get_last_db_document_case(db_document)
286+
if case:
287+
asyncio.create_task(ConnectHelpdeskCase.resolve(case['id'], client))
288+
275289
@classmethod
276290
def _default_query(cls, context: Context) -> dict:
277291
q = {'status': {'$ne': DBStatus.DELETED}}
@@ -285,9 +299,9 @@ def _default_query(cls, context: Context) -> dict:
285299
def _db_document_repr(cls, db_document: dict, config: dict = None) -> dict:
286300
document = copy(db_document)
287301

288-
cases = document.get('cases')
289-
if cases:
290-
document['case'] = cases[-1]
302+
case = cls._get_last_db_document_case(document)
303+
if case:
304+
document['case'] = case
291305

292306
status = document.get('status')
293307
credentials = db_document.get('credentials')
@@ -300,6 +314,11 @@ def _db_document_repr(cls, db_document: dict, config: dict = None) -> dict:
300314

301315
return document
302316

317+
@classmethod
318+
def _get_last_db_document_case(cls, db_document: dict) -> Optional[dict]:
319+
cases = db_document.get('cases')
320+
return cases[-1] if cases else None
321+
303322
@classmethod
304323
async def _get_validated_region_document(
305324
cls,
@@ -605,3 +624,10 @@ async def create(
605624
helpdesk_case = await client('helpdesk').cases.create(payload=data)
606625

607626
return helpdesk_case
627+
628+
@classmethod
629+
async def resolve(cls, case_id: str, client: AsyncConnectClient):
630+
try:
631+
await client('helpdesk').cases[case_id]('resolve').post()
632+
except ClientError:
633+
client.logger.logger.warning('Could not resolve case %s.', case_id)

dbaas/static/6c5bb1bba5eebb952b58.js renamed to dbaas/static/b7d579a519616740b116.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dbaas/static/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<html><head><title>Lorem ipsum</title><link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Mono:400,500|Material+Icons" rel="stylesheet"><link id="mock-favicon" rel="shortcut icon" href="#"><script defer="defer" src="6c5bb1bba5eebb952b58.js"></script><link href="main.css" rel="stylesheet"></head><body><div id="app"></div></body></html>
1+
<html><head><title>Lorem ipsum</title><link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Mono:400,500|Material+Icons" rel="stylesheet"><link id="mock-favicon" rel="shortcut icon" href="#"><script defer="defer" src="b7d579a519616740b116.js"></script><link href="main.css" rel="stylesheet"></head><body><div id="app"></div></body></html>

dbaas/static/main.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dbaas/webapp.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,11 @@ async def delete_database(
162162
self,
163163
db_id: _db_id_type,
164164
context: Context = Depends(get_call_context),
165+
client: AsyncConnectClient = Depends(get_installation_client),
165166
db=Depends(get_db),
166167
):
167168
result = await self._action(
168-
db_id, action=DB.delete, is_admin_action=True, context=context, db=db,
169+
db_id, action=DB.delete, is_admin_action=True, context=context, db=db, client=client,
169170
)
170171

171172
return responses.Response(status_code=204) if isinstance(result, BaseModel) else result
@@ -209,6 +210,7 @@ async def activate_database(
209210
data: DatabaseActivate,
210211
context: Context = Depends(get_call_context),
211212
config: dict = Depends(get_config),
213+
client: AsyncConnectClient = Depends(get_installation_client),
212214
db=Depends(get_db),
213215
):
214216
result = await self._action(
@@ -219,6 +221,7 @@ async def activate_database(
219221
context=context,
220222
db=db,
221223
config=config,
224+
client=client,
222225
)
223226

224227
return result

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

poetry.lock

Lines changed: 16 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)