Skip to content

Commit

Permalink
feat: modify plugin skeleton code for DataSourceAccount (cloudforet-i…
Browse files Browse the repository at this point in the history
  • Loading branch information
ImMin5 committed Apr 19, 2024
1 parent 1f0f3a2 commit 4135b24
Show file tree
Hide file tree
Showing 9 changed files with 109 additions and 37 deletions.
1 change: 1 addition & 0 deletions src/spaceone/cost_analysis/conf/global_conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
"masking": {
"rules": {
"DataSource.register": ["secret_data"],
"DataSource.update_secret_data": ["secret_data"],
}
}
}
Expand Down
19 changes: 7 additions & 12 deletions src/spaceone/cost_analysis/plugin/data_source/conf/global_conf.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
LOG = {
'filters': {
'masking': {
'rules': {
'DataSource.verify': [
'secret_data'
],
'Job.get_tasks': [
'secret_data'
],
'Cost.get_data': [
'secret_data'
]
"filters": {
"masking": {
"rules": {
"DataSource.verify": ["secret_data"],
"Job.get_tasks": ["secret_data"],
"Cost.get_linked_accounts": ["secret_dta"],
"Cost.get_data": ["secret_data"],
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@


class Cost(BaseAPI, cost_pb2_grpc.CostServicer):

pb2 = cost_pb2
pb2_grpc = cost_pb2_grpc

def get_linked_accounts(self, request, context):
params, metadata = self.parse_request(request, context)
cost_svc = CostService(metadata)
for response in cost_svc.get_linked_accounts(params):
yield self.dict_to_message(response)

def get_data(self, request, context):
params, metadata = self.parse_request(request, context)
cost_svc = CostService(metadata)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
from typing import Union
from pydantic import BaseModel, Field

__all__ = ['CostGetDataRequest']
__all__ = ["CostGetLinkedAccountsRequest", "CostGetDataRequest"]


class CostGetLinkedAccountsRequest(BaseModel):
options: dict
schema_name: Union[dict, None] = Field(None, alias="schema")
secret_data: dict
domain_id: str


class CostGetDataRequest(BaseModel):
options: dict
secret_data: dict
schema_name: Union[str, None] = Field(None, alias='schema')
schema_name: Union[str, None] = Field(None, alias="schema")
task_options: dict
domain_id: str
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
from typing import List, Union
from pydantic import BaseModel

__all__ = ['CostsResponse']
__all__ = ["AccountsResponse", "CostsResponse"]


class Account(BaseModel):
account_id: str
name: str


class Cost(BaseModel):
Expand All @@ -19,5 +24,9 @@ class Cost(BaseModel):
billed_date: str


class AccountsResponse(BaseModel):
results: List[Account]


class CostsResponse(BaseModel):
results: List[Cost]
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,48 @@
from typing import Generator, Union
from spaceone.core.service import BaseService, transaction
from spaceone.core.service.utils import convert_model
from spaceone.cost_analysis.plugin.data_source.model import (CostGetDataRequest, CostsResponse)
from spaceone.cost_analysis.plugin.data_source.model import (
CostGetDataRequest,
CostsResponse,
CostGetLinkedAccountsRequest,
AccountsResponse,
)

_LOGGER = logging.getLogger(__name__)


class CostService(BaseService):
resource = "Cost"

@transaction
@convert_model
def get_data(self, params: CostGetDataRequest) -> Generator[Union[CostsResponse, dict], None, None]:
""" Get external cost data
def get_linked_accounts(
self, params: CostGetLinkedAccountsRequest
) -> Union[AccountsResponse, dict]:
"""Get linked accounts
Args:
params (CostGetLinkedAccountsRequest): {
'options': 'dict', # Required
'secret_data': 'dict', # Required
'schema': 'str',
'domain_id': 'str' # Required
}
Returns:
AccountsResponse: {
'results': 'list'
}
"""

func = self.get_plugin_method("get_linked_accounts")
response = func(params.dict())
return AccountsResponse(**response)

@transaction
@convert_model
def get_data(
self, params: CostGetDataRequest
) -> Generator[Union[CostsResponse, dict], None, None]:
"""Get external cost data
Args:
params (CostGetDataRequest): {
Expand Down Expand Up @@ -41,7 +72,7 @@ def get_data(self, params: CostGetDataRequest) -> Generator[Union[CostsResponse,
}
"""

func = self.get_plugin_method('get_data')
func = self.get_plugin_method("get_data")
response_iterator = func(params.dict())
for response in response_iterator:
yield CostsResponse(**response)
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,22 @@
from typing import Union
from spaceone.core.service import BaseService, transaction
from spaceone.core.service.utils import convert_model
from spaceone.cost_analysis.plugin.data_source.model import (DataSourceInitRequest, DataSourceVerifyRequest,
PluginResponse)
from spaceone.cost_analysis.plugin.data_source.model import (
DataSourceInitRequest,
DataSourceVerifyRequest,
PluginResponse,
)

_LOGGER = logging.getLogger(__name__)


class DataSourceService(BaseService):
resource = "DataSource"

@transaction
@convert_model
def init(self, params: DataSourceInitRequest) -> Union[PluginResponse, dict]:
""" init plugin by options
"""init plugin by options
Args:
params (DataSourceInitRequest): {
Expand All @@ -27,14 +31,14 @@ def init(self, params: DataSourceInitRequest) -> Union[PluginResponse, dict]:
}
"""

func = self.get_plugin_method('init')
func = self.get_plugin_method("init")
response = func(params.dict())
return PluginResponse(**response)

@transaction
@convert_model
def verify(self, params: DataSourceVerifyRequest) -> None:
""" Verifying data source plugin
"""Verifying data source plugin
Args:
params (DataSourceVerifyRequest): {
Expand All @@ -48,5 +52,5 @@ def verify(self, params: DataSourceVerifyRequest) -> None:
None
"""

func = self.get_plugin_method('verify')
func = self.get_plugin_method("verify")
func(params.dict())
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,21 @@
from typing import Union
from spaceone.core.service import BaseService, transaction
from spaceone.core.service.utils import convert_model
from spaceone.cost_analysis.plugin.data_source.model import (JobGetTaskRequest, TasksResponse)
from spaceone.cost_analysis.plugin.data_source.model import (
JobGetTaskRequest,
TasksResponse,
)

_LOGGER = logging.getLogger(__name__)


class JobService(BaseService):
resource = "Job"

@transaction
@convert_model
def get_tasks(self, params: JobGetTaskRequest) -> Union[TasksResponse, dict]:
""" Get job tasks
"""Get job tasks
Args:
params (JobGetTaskRequest): {
Expand All @@ -32,6 +36,6 @@ def get_tasks(self, params: JobGetTaskRequest) -> Union[TasksResponse, dict]:
"""

func = self.get_plugin_method('get_tasks')
func = self.get_plugin_method("get_tasks")
response = func(params.dict())
return TasksResponse(**response)
32 changes: 24 additions & 8 deletions src/spaceone/cost_analysis/plugin/data_source/skeleton/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
app = DataSourcePluginServer()


@app.route('DataSource.init')
@app.route("DataSource.init")
def data_source_init(params: dict) -> dict:
""" init plugin by options
"""init plugin by options
Args:
params (DataSourceInitRequest): {
Expand All @@ -22,9 +22,9 @@ def data_source_init(params: dict) -> dict:
pass


@app.route('DataSource.verify')
@app.route("DataSource.verify")
def data_source_verify(params: dict) -> None:
""" Verifying data source plugin
"""Verifying data source plugin
Args:
params (CollectorVerifyRequest): {
Expand All @@ -40,9 +40,9 @@ def data_source_verify(params: dict) -> None:
pass


@app.route('Job.get_tasks')
@app.route("Job.get_tasks")
def job_get_tasks(params: dict) -> dict:
""" Get job tasks
"""Get job tasks
Args:
params (JobGetTaskRequest): {
Expand All @@ -64,9 +64,25 @@ def job_get_tasks(params: dict) -> dict:
pass


@app.route('Cost.get_data')
@app.route("Cost.get_linked_accounts")
def cost_get_linked_accounts(params: dict) -> dict:
"""Get linked accounts
Args:
params (GetLinkedAccountsRequest): {
'options': 'dict', # Required
'schema': 'dict',
'secret_data': 'dict', # Required
'domain_id': 'str' # Required
"""
pass


@app.route("Cost.get_data")
def cost_get_data(params: dict) -> Generator[dict, None, None]:
""" Get external cost data
"""Get external cost data
Args:
params (CostGetDataRequest): {
Expand Down

0 comments on commit 4135b24

Please sign in to comment.