From 88b08e9c7dd609106e79cda3e4149e831a8831a3 Mon Sep 17 00:00:00 2001 From: jonatasbiazus Date: Wed, 21 Sep 2022 14:22:06 -0300 Subject: [PATCH] add modulo aws analytics --- aws_s3_analytics/__init__.py | 1 + aws_s3_analytics/__manifest__.py | 19 +++++ aws_s3_analytics/data/cron.xml | 14 ++++ aws_s3_analytics/data/decimal_data.xml | 9 ++ aws_s3_analytics/models/__init__.py | 2 + aws_s3_analytics/models/buckets.py | 54 ++++++++++++ aws_s3_analytics/models/res_company.py | 9 ++ aws_s3_analytics/security/ir.model.access.csv | 3 + aws_s3_analytics/static/description/icon.png | Bin 0 -> 10581 bytes aws_s3_analytics/views/buckets.xml | 77 ++++++++++++++++++ aws_s3_analytics/views/res_company.xml | 18 ++++ 11 files changed, 206 insertions(+) create mode 100644 aws_s3_analytics/__init__.py create mode 100644 aws_s3_analytics/__manifest__.py create mode 100644 aws_s3_analytics/data/cron.xml create mode 100644 aws_s3_analytics/data/decimal_data.xml create mode 100644 aws_s3_analytics/models/__init__.py create mode 100644 aws_s3_analytics/models/buckets.py create mode 100644 aws_s3_analytics/models/res_company.py create mode 100644 aws_s3_analytics/security/ir.model.access.csv create mode 100644 aws_s3_analytics/static/description/icon.png create mode 100644 aws_s3_analytics/views/buckets.xml create mode 100644 aws_s3_analytics/views/res_company.xml diff --git a/aws_s3_analytics/__init__.py b/aws_s3_analytics/__init__.py new file mode 100644 index 00000000..9a7e03ed --- /dev/null +++ b/aws_s3_analytics/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/aws_s3_analytics/__manifest__.py b/aws_s3_analytics/__manifest__.py new file mode 100644 index 00000000..8c786c43 --- /dev/null +++ b/aws_s3_analytics/__manifest__.py @@ -0,0 +1,19 @@ +{ # pylint: disable=C8101,C8103,C7902 + "name": "AWS S3 analytics", + "description": """Análise dos buckets de backup.""", + "author": "Trustcode", + "category": "Productivity", + "version": "13.0.0.1", + "contributors": [""], + "depends": ['mail'], + "data": [ + "views/buckets.xml", + "views/res_company.xml", + "security/ir.model.access.csv", + "data/cron.xml", + "data/decimal_data.xml", + ], + "installable": True, + "application": True, + "auto-install": False, +} diff --git a/aws_s3_analytics/data/cron.xml b/aws_s3_analytics/data/cron.xml new file mode 100644 index 00000000..e068776e --- /dev/null +++ b/aws_s3_analytics/data/cron.xml @@ -0,0 +1,14 @@ + + + + Cron Update Buckets + 1 + hours + code + -1 + + + model.list_buckets() + + + \ No newline at end of file diff --git a/aws_s3_analytics/data/decimal_data.xml b/aws_s3_analytics/data/decimal_data.xml new file mode 100644 index 00000000..751d90bd --- /dev/null +++ b/aws_s3_analytics/data/decimal_data.xml @@ -0,0 +1,9 @@ + + + + + Disk usage + + + + \ No newline at end of file diff --git a/aws_s3_analytics/models/__init__.py b/aws_s3_analytics/models/__init__.py new file mode 100644 index 00000000..bc8aa7bf --- /dev/null +++ b/aws_s3_analytics/models/__init__.py @@ -0,0 +1,2 @@ +from . import buckets +from . import res_company \ No newline at end of file diff --git a/aws_s3_analytics/models/buckets.py b/aws_s3_analytics/models/buckets.py new file mode 100644 index 00000000..14e3956b --- /dev/null +++ b/aws_s3_analytics/models/buckets.py @@ -0,0 +1,54 @@ +import datetime +from odoo import fields, models + +try: + from boto3 import session + from boto3 import resource + from boto3 import client +except ImportError: + _logger.error('Cannot import Boto3', exc_info=True) + + +class AwsS3Analytics(models.Model): + _name = 'aws.s3.analytics' + _description = 'AWS S3 Analytics' + _rec_name = 'bucket_name' + + bucket_name = fields.Char(string="Bucket", readonly=True) + object_line_ids = fields.One2many('object.lines', 'relation_id', string='Object Lines', readonly=True) + + def list_buckets(self): + + session = boto3.Session( + aws_access_key_id=(self.env.company.aws_access_key_id_o), + aws_secret_access_key=(self.env.company.aws_secret_access_key_o), + ) + s3 = session.resource('s3') + lista = [] + + for bucket in s3.buckets.all(): + lista.append(bucket) + + self.create_bucket(lista) + + def create_bucket(self, lista): + for i in lista: + name_dir = i.name + + vals = { + "bucket_name": name_dir, + } + + self.create(vals) + self.env.cr.commit() + + +class ObjectLines(models.Model): + _name = 'object.lines' + _description = 'Object lines' + + bucket_name_id = fields.Many2one('aws.s3.analytics', string='Bucket') + bucket_object = fields.Char(string="Objeto") + last_modified = fields.Datetime('Ultima modificação do Obj') + disk_usage = fields.Float(string="Uso de disco", digits='Disk usage') + relation_id = fields.Many2one('aws.s3.analytics', string='IDS') diff --git a/aws_s3_analytics/models/res_company.py b/aws_s3_analytics/models/res_company.py new file mode 100644 index 00000000..17606c8e --- /dev/null +++ b/aws_s3_analytics/models/res_company.py @@ -0,0 +1,9 @@ +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + aws_access_key_id_o = fields.Char(string="Aws Token") + aws_secret_access_key_o = fields.Char(string="Aws Secret Key") + diff --git a/aws_s3_analytics/security/ir.model.access.csv b/aws_s3_analytics/security/ir.model.access.csv new file mode 100644 index 00000000..1a1e7da8 --- /dev/null +++ b/aws_s3_analytics/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_aws_s3_analytics,access.aws.s3.analytics,model_aws_s3_analytics,account.group_account_readonly,1,0,0,1 +access_object_lines,access.object.lines,model_object_lines,account.group_account_readonly,1,1,1,1 diff --git a/aws_s3_analytics/static/description/icon.png b/aws_s3_analytics/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..52fd9a04a22b59194e0ac318b24e06c1823c0fe7 GIT binary patch literal 10581 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 + + + + + Bucket view + ir.actions.act_window + aws.s3.analytics + kanban,form,graph + +

+ Aguarde enquanto sincronizamos com a AWS! +

+
+
+ + + + + + + aws.s3.analytics.form + aws.s3.analytics + +
+ + + + + + + + + + + + + + +
+
+
+ + + aws.s3.analytics.kanban + aws.s3.analytics + + + + + +
+
+
    +
  • +

    + +

    +
  • +
+ +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/aws_s3_analytics/views/res_company.xml b/aws_s3_analytics/views/res_company.xml new file mode 100644 index 00000000..7278ba17 --- /dev/null +++ b/aws_s3_analytics/views/res_company.xml @@ -0,0 +1,18 @@ + + + + res.company + + + + + + + + + + + + + + \ No newline at end of file