Add report timestamp resource
This will be use to record report timestamps and sender.
So we will be able to have better control of the report time and trace
the report by sender.
diff --git a/staffeln/db/sqlalchemy/alembic/versions/5b2e78435231_add_report_timestamp.py b/staffeln/db/sqlalchemy/alembic/versions/5b2e78435231_add_report_timestamp.py
new file mode 100644
index 0000000..e6107eb
--- /dev/null
+++ b/staffeln/db/sqlalchemy/alembic/versions/5b2e78435231_add_report_timestamp.py
@@ -0,0 +1,40 @@
+"""add report timestamp
+
+Revision ID: 5b2e78435231
+Revises: 2b2b9df199bd
+Create Date: 2023-03-20 12:24:58.084135
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '5b2e78435231'
+down_revision = '2b2b9df199bd'
+
+from alembic import op
+import sqlalchemy as sa
+
+from oslo_log import log
+
+
+LOG = log.getLogger(__name__)
+
+
+def upgrade():
+ op.create_table(
+ 'report_timestamp',
+ sa.Column('id', sa.String(36), primary_key=True, nullable=False),
+ sa.Column('created_at', sa.DateTime),
+ sa.Column('updated_at', sa.DateTime),
+ sa.Column('sender', sa.String(length=255), nullable=True),
+
+ mysql_engine='InnoDB',
+ mysql_charset='utf8')
+
+
+
+def downgrade():
+ try:
+ op.drop_table('report_timestamp')
+ except Exception:
+ LOG.exception("Error Dropping 'report_timestamp' table.")
+
diff --git a/staffeln/db/sqlalchemy/api.py b/staffeln/db/sqlalchemy/api.py
index 3526b93..50615bc 100644
--- a/staffeln/db/sqlalchemy/api.py
+++ b/staffeln/db/sqlalchemy/api.py
@@ -100,6 +100,23 @@
def _get_relationships(model):
return inspect(model).relationships
+ def _add_report_filters(self, query, filters):
+ """Add filters while listing report_timestamp table"""
+ if filters is None:
+ filters = {}
+
+ plain_fields = [
+ "sender",
+ "created_at",
+ ]
+
+ return self._add_filters(
+ query=query,
+ model=models.Backup_data,
+ filters=filters,
+ plain_fields=plain_fields,
+ )
+
def _add_backup_filters(self, query, filters):
"""Add filters while listing the columns from the backup_data table"""
if filters is None:
@@ -336,3 +353,28 @@
return self._soft_delete(models.Backup_data, id)
except: # noqa: E722
LOG.error("Backup Not found.")
+
+ def get_report_timestamp_list(self, *args, **kwargs):
+ return self._get_model_list(
+ models.Report_timestamp, self._add_report_filters, *args, **kwargs
+ )
+
+ def create_report_timestamp(self, values):
+ try:
+ report_timestamp_data = self._create(models.Report_timestamp, values)
+ except db_exc.DBDuplicateEntry:
+ LOG.error("Report Timestamp ID already exists.")
+ return report_timestamp_data
+
+ def update_report_timestamp(self, id, values):
+
+ try:
+ return self._update(models.Report_timestamp, id, values)
+ except: # noqa: E722
+ LOG.error("Report Timestamp resource not found.")
+
+ def soft_delete_report_timestamp(self, id):
+ try:
+ return self._soft_delete(models.Report_timestamp, id)
+ except: # noqa: E722
+ LOG.error("Report Timestamp Not found.")
diff --git a/staffeln/db/sqlalchemy/models.py b/staffeln/db/sqlalchemy/models.py
index 99b7ea3..c186ddc 100644
--- a/staffeln/db/sqlalchemy/models.py
+++ b/staffeln/db/sqlalchemy/models.py
@@ -71,3 +71,12 @@
instance_name = Column(String(100))
incremental = Column(Boolean, default=False)
reason = Column(String(255), nullable=True)
+
+
+class Report_timestamp(Base):
+ """Represent the report_timestamp"""
+
+ __tablename__ = "report_timestamp"
+ __table_args__ = table_args()
+ id = Column(Integer, primary_key=True, autoincrement=True)
+ sender = Column(String(255), nullable=True)
diff --git a/staffeln/objects/__init__.py b/staffeln/objects/__init__.py
index b79e47b..8e097a4 100755
--- a/staffeln/objects/__init__.py
+++ b/staffeln/objects/__init__.py
@@ -1,8 +1,9 @@
from .queue import Queue # noqa: F401
from .volume import Volume # noqa: F401
+from .report import ReportTimestamp # noqa: F401
-# from volume import Volume
def register_all():
__import__("staffeln.objects.volume")
__import__("staffeln.objects.queue")
+ __import__("staffeln.objects.report")
diff --git a/staffeln/objects/report.py b/staffeln/objects/report.py
new file mode 100644
index 0000000..954ca66
--- /dev/null
+++ b/staffeln/objects/report.py
@@ -0,0 +1,46 @@
+from oslo_versionedobjects import fields as ovoo_fields
+
+from staffeln.db import api as db_api
+from staffeln.objects import base
+from staffeln.objects import fields as sfeild
+
+
+@base.StaffelnObjectRegistry.register
+class ReportTimestamp(
+ base.StaffelnPersistentObject, base.StaffelnObject, base.StaffelnObjectDictCompat
+):
+ VERSION = "1.0"
+ # Version 1.0: Initial version
+
+ dbapi = db_api.get_instance()
+
+ fields = {
+ "id": sfeild.IntegerField(),
+ "sender": sfeild.StringField(nullable=True),
+ "created_at": ovoo_fields.DateTimeField(),
+ }
+
+ @base.remotable_classmethod
+ def list(cls, context, filters=None): # pylint: disable=E0213
+ db_report = cls.dbapi.get_report_timestamp_list(context, filters=filters)
+ return [cls._from_db_object(cls(context), obj) for obj in db_report]
+
+ @base.remotable
+ def create(self):
+ """Create a :class:`report_timestamp` record in the DB"""
+ values = self.obj_get_changes()
+ db_report_timestamp = self.dbapi.create_report_timestamp(values)
+ return self._from_db_object(self, db_report_timestamp)
+
+ @base.remotable
+ def save(self):
+ updates = self.obj_get_changes()
+ db_obj = self.dbapi.update_report_timestamp(self.id, updates)
+ obj = self._from_db_object(self, db_obj, eager=False)
+ self.obj_refresh(obj)
+ self.obj_reset_changes()
+
+ @base.remotable
+ def delete(self):
+ """Soft Delete the :class:`report_timestamp` from the DB"""
+ self.dbapi.soft_delete_report_timestamp(self.id)