Odoo Database Tools

Current database: {{ db.name[1] }}

Current support level: {{ level_map.get(level) }}

{% if 'maintenance' in (db.status[1] or '') %}

Database Locked

This database is currently locked and cannot be accessed by conventional means (status: {{ db.status[1] }}). Contact technical support if this is unexpected.

{% endif %} {% if db.mode[1] == 'drop' %}

Database in Drop mode

This database is in the 'drop' mode and will be removed from the server on {{ db.expire_date[1] | datetime }}.

The database is unreachable by the customer at this time.

{% if db.status[1] in ('close', 'cancel') %}

The subscription must be re-opened for the database to be correctly reactivated. Note that it may take up to 20min for this change to be detected.

{% else %} {% if level >= access_map.drop %}

Undrop Database

{% else %}

You do not have enough rights to modify the database status. Please contact Functional Support.

{% endif %} {% endif %}
{% endif %} {% if level >= access_map.impersonation %}

User Impersonation

You are currently impersonating : {{impersonated_user.human_readable}}

{% endif %} {% if level >= access_map.expire_date and db.mode[1] == 'trial' and db.extra_apps[1] %}

Trial Expiration

This database is set to expire on {{ db.expire_date[1] | datetime }}.

Your current support level allows you to extend this trial up to {{ expiration_limit | date}}.

{% endif %} {% if level >= access_map.duplicate and duplicate_possible %}

Duplication

You can duplicate this database for testing purposes. Its default life will be of 4 hours and can be extended until {{ duplicate_expiry_extended | datetime }}.

The duplication process can take up to 45 minutes. Do not refresh or close the window!

Existing Duplicates

{% if duplicate_list %} {% for dup in duplicate_list %} {% endfor %}
Name
{{ dup }} Support Page
{% else %}

No duplicates.

{% endif %}
{% endif %} {% if level >= access_map.email_limit %}

E-mail Limit

E-mail limits are in place to prevent our e-mail servers from being black-listed. A single spammer can blacklist our saas mailserver, downgrading the rating of all our users! This means that a single customer can potentially make all of our customers' e-mails be classified as SPAM.

Proceed carefully, changing these values should always be done after checking the content of the e-mails sent by the customer. The following is a basic check list:

  • Email templates seems legit
    • The content seems legal (no Viagra ad, no scamming/phishing)
    • The content seems relevant to the activity of the customer
    • An "Unsubscribe" link is present
  • Mailing lists addresses seem lawfully acquired & sane
    • Huge lists are sometimes an indicator that it was acquired unlawfully
    • All entries are correctly formatted emails (illegal lists sometimes contain URLs instead of emails or weirdly capitalized entries)
    • An excessive mount of duplicates is a bad sign
  • Past campaigns have reasonable bounce rates (visible as a Stat button)
    • Don't raise the limit too high for the first campaign; make progressive changes after checking the bounce rate as the campaign progresses
    • More than 5% is suspicious
    • More than 6-7% is unacceptable
  • Single purpose accounts are suspicious by default

    If some guy decides to pay 15 USD to open a paid account on Odoo.com with only the Mass Mailing e-mail then asks to be allowed to send thousands of e-mail/day, you should raise your eyebrow higher than the ceiling.

If in doubt, ask guidance to the SaaS Office.

Do not hesitate to make progressive increases (i.e. don't set a customer to 5.000 on their first request, increase the limit gradually as you confirm we can trust them).

If a customer is not satisfied but you still do not trust their list, you can offer them alternatives:

  • Configure an outgoing mail server

    As explained in our online documentation; no rate-limiting for those

  • Perform a complete revalidation of your subscribers list

    Send a email to your subscribers outside Odoo, and ask them to confirm their interest using an opt-in form setup on your Odoo website. That way you will obtain a completely clean and verified list)

.

This information should not be disclosed to clients or partners.

In a close future, the result of this algorithm will be used to raise the email limit automatically.
If you think that the client should be granted a raise but the badge is red (or the contrary), please tell the SaaS/Internal team, as the rule weights might need to be adjusted.

Your current access level allows you to set this limit to {{ email_limit }} emails per day.

{% endif %} {% if level >= access_map.duplicate_limit %}

Duplicates Limit

Databases are given a maximum number of duplicates to prevent working around the trial creation daily limits.

In case the limit is reached, the first obvious solution is to drop the oldest duplicates. Databases in 'drop' mode are accounted for but with a smaller weight. It is intended to prevent customers from abusing the system by duplicating then dropping DBs.

The default values should be fine for most cases. If you think that the limit should be raised, please tell the SaaS/Infra team, as the rule weights might need to be adjusted.

Your current access level allows you to set this limit to {{ duplicate_limit }}.

{% endif %} {% if level >= access_map.custom_domain %}

Custom Domains

{% if custom_domains %}

Investigate the error before trying again and keep in mind it takes some time for the certificate to be generated and then deployed.

Use the "Diagnostics" button to run diagnostics. This is provided for information purposes only, use your own judgment.

{% for domain in custom_domains %} {% endfor %}
{{ domain }}
    {% else %}

    No custom domains.

    {% endif %}
    {% endif %} {% if level >= access_map.security_features %}

    Security features

    • Strict-Transport-Security (HSTS)
    • Secure attribute on session_id cookie
    • SameSite=Lax on session_id cookie

    Security features are currently {{ 'enabled' if db.secure else 'disabled' }}.

    {% endif %} {% if level >= access_map.oauth_admin %}

    Internal users of this database may be "linked" with an Odoo.com account.

    • By default, the first user of the database is linked to its Odoo.com account; other users are not.
    • User login in this database and on Odoo.com must match: if you want to change the logins, unlink them beforehand.
    • Linked users can use their login and password from Odoo.com in this database (credentials are synchronized);
    • Linked users can see this database listed in the database manager;
    • Only users belonging to the group Administration/Settings can perform administrative tasks in the database manager (e.g.: renaming the database, adding a custom domain name...), this is why one of them must always stay linked.

    {% for admin_login, user_detail in admins_dict.items() %} {% elif user_detail['oauth_uid'] %} {% else %} {% endif %} {% endif %} {% endfor %}
    User Status
    {{admin_login}} {% if user_detail['is_admin'] %}{% endif %} {% if user_detail['is_using_full_oauth']%} uses OAuth to sign in and cannot be linked {% else %} {% if user_detail['oauth_uid'] and user_detail['is_last_admin']%} is linked to the Odoo.com user {{ user_detail['accounts_info'].get('login', '') }} (#{{ user_detail['oauth_uid'] }})
    (this is the last linked user belonging to Administration/Settings) {% elif user_detail['oauth_uid'] %} is linked to the Odoo.com user {{ user_detail['accounts_info'].get('login', '') }} (#{{ user_detail['oauth_uid'] }}) {% else %} {% if user_detail['accounts_info'] %} is not linked yet {% else %} can not be linked; create it first on Odoo.com {% endif %} {% endif %} {% endif %}
    {% if not user_detail['is_using_full_oauth']%} {% if not user_detail['oauth_uid'] and user_detail['accounts_info'] %}
    {% endif %} {% if level >= access_map.admin_rights %}

    Impotent Admin

    If the Administrator was clueless and removed their own Settings rights, use this button to reset it.

    {% endif %} {% if db.mode[1] == 'trial' and level >= access_map.toggle_free %}

    One-app Free

    {% if db.extra_apps[1] %}

    This database is currently out of the "One App Free" offer and will expire on {{ db.expire_date[1] | datetime }}.

    If you set it to the One-App Free mode, its expiration date will be set in 3 months and will be extended every time the user connects (this is the normal One-App Free behaviour).

    {% set label = 'Set to Free' %} {% else %}

    This database is currently in the "One App Free" offer and will not expire if the customer connects every three month.

    If you set it to the Trial mode, its expiration date will be set to 15 days from now.

    {% set label = 'Set to Trial' %} {% endif %}
    {% endif %} {% if level >= access_map.ping %}

    Ping

    An update notification (a ping) is when the database contact the main Odoo.com server to send information regarding its usage (number of users, apps, etc). These updates happen automatically every 7 days at least and when users are created/deleted/archived or when Apps are installed/uninstalled.

    Triggering an update might be necessary if some changes have been applied manually or if it seems that the database state is not correct in the Odoo.com backend. Note that pings triggered through this form are logged; a KO status mean that it was unsuccessful. You can trigger the update using this button:

    {% endif %} {% if level >= access_map.drop %}

    {{ db.mode[1] != 'drop' and 'Drop' or 'Undrop' }} Database

    {% if db.mode[1] != 'drop' %}

    Customers can now delete their databases themselves by going to the Database Management Page and using the "Delete" button.

    Dropping a database does not delete it from the Database menu in the Odoo.com portal, which means that customers will still see the database listed in /my/databases for about a month. The best way to drop a database is through the Database Management Page, in that case it is removed from the database list.

    {% if db.mode[1] == 'paid' %}
    The database must be unlinked from the Subscription before being dropped (removing the subscription from the database might take a few minutes to be synchronized).
    {% else %}
    Please enter the number {{ user_validation }} to validate this action.
    {% endif %}
    {% else %}

    This database is in the 'drop' mode and will be removed from the server on {{ db.expire_date[1] | datetime }}.

    If checked, the database will be reset to the One-App Free mode, otherwise it will be a 15 days trial.
    {% endif %}
    {% endif %} {% if level >= access_map.support_logs %}

    Support Operations History

    {% if support_logs %}
    {% include 'log_table.html' %}
    {% if log_pages > 1 %}
    {% endif %} {% else %}

    No support logs found for this database. This could also mean that the registry has crashed.

    {% endif %}
    {% endif %} {% if level >= access_map.tech_logs %}

    Odoo Technical Logs

    Logs are currently available for the complete server. Logs for the last 2 days are stored as text files accessible directly through the browser (note that a single uncompressed log is around 100Mb), older logs (up to 10 days) are gzipped and may be downloaded. Logs are rotated daily around 5am UTC.

    These files are password protected, you can get the password from your friendly saas-office.

    You can also use the dynamic viewer:
    View Logs

    {% endif %} {% if level >= access_map.migration %}

    Upgrade Requests History

    The following table contains the current upgrade requests linked to the current database. Note that this does necessarily contains the whole history for this database as the metabase gets cleaned sometimes and history can get lost when a db moves to another server (which can happen with upgrades). However, most recent requests should be there.

    Note that upgrade requests on the platform are archived after a default delay, which may cause the Upgrade Request link to lead you to a dead-end.

    {% if migration_history %}
    {% for vals in migration_history %} {% endfor %}
    Date State Mode Target Version Request Date E-mail Upgrade Request
    {{ vals.date | datetime }} {{ vals.state }} {{ vals.mode }} {% if vals.mode == 'Rolling Release' and vals.state != 'cancelled (meta)' %}
    {% endif %}
    {{ vals.target_version }} {{ vals.date | datetime }} {{ vals.email or '(customer)' }} {% if vals.request_link %} Link {% else %}

    No Link

    {% endif %}
    States:
    • Queued: the database will be uploaded to the upgrade platform soon (usually within 30min)
    • Running: the upgrade is running locally (bypassing)
    • Sent to Upgrade Platform: the upgrade is in progress on the platform (the upgrade link should give you hints about its current status)
    • To Restore on Cloud: the upgrade is done and will be restored on another server of our Cloud soon
    • Done: the complete upgrade process is finished
    • Failed: the upgrade has failed
    Modes:
    • Internal: the customer receives no e-mail at all but may see the database appear in their database management page
    • Duplicate: the customer receives an e-mail with a link inviting them to test a migrated version of a duplicate instance
    • Production: real upgrade with downtime and all, use only with customer agreement! (not available yet)
    • Rolling release: real upgrade queued by the platform, and will occur during nighttime.
    {% else %}

    No upgrade data found for this database. This does not necessarily mean the there is no upgrade in progress.

    {% endif %}

    Upgrade Request

    {% if target_versions %}
    {% if too_big %}
    Filestore too big for unsupervized production upgrade, check with the upgrade team. End user cannot perform an upgrade on its own. An upgrade will succeed, but the attachments may not be synchronized in the destination database (e.g. PDF files, website images, etc.).
    {% endif %}
    • Internal: the customer receives no e-mail at all but may see the database appear in their database management page
    • Copy: the customer receives an e-mail with a link inviting them to test the instance
    • Production: production upgrade, the customer receives an email once it's done
    If set, this address will receive all e-mails regarding this upgrade; if left empty, the customer will receive them.
    Please enter the number {{ user_validation }} to validate this action.
    {% else %}

    No higher version available at this time.

    {% endif %}
    {% if db.mode[1] == 'trial' or lockrruntil %}

    Rolling release locking

    {% if db.mode[1] == 'trial' %}
    If set, no rolling release will be processed for this db until date is reached. Maximum lock time is one month.
    {% else %} No rolling release will be processed for this db until {{ lockrruntil }} {% endif %}
    {% endif %} {% endif %} {% if level >= access_map.company_users %}

    Companies Information

    {% endif %} {% if level >= access_map.restore %}

    Database Backups

    You can restore this database to a previous auto-generated backup.



    {% endif %} {% if level >= access_map.dump %}

    Database Download

    Your database backup is being prepared. You will be notified by email when it is ready. Use the download button or use the direct link below to download your database backup.

    Dump date:
    Dump state:

    Download dump
    {% endif %} {% if level >= access_map.iap_accounts %}

    IAP Accounts



    {% endif %} {% if level >= access_map.tech_logs %}

    Metabase Information

    Database Information

    {% for (key,value) in db.values() %} {% endfor %}
    Parameter Value
    {{ key }} {{ value }}
    {% endif %}

    Database Status

    {% if level > 0 and db.mode[1] == 'trial' and db.extra_apps[1] %} {% endif %}
    Database name{{ db.name[1] }}
    UUID{{ db.uuid[1] }}
    Sub. code{{ subcode }}
    Version{{ version }}
    Mode{{ db_mode }}
    E-mail usage
    {{ db.email_daily_count[1] }} sent today out of {{ db.email_daily_limit[1] }}. {{ db.ext_email_daily_count[1] }} sent today via an external server. {{ db.email_total_count[1] }} sent in total.
    Expiration Date{{ db.expire_date[1] | datetime }}

    Git Status

    Odoo {% if git_info.odoo.commit %} {{ git_info.odoo.commit }} {% if git_info.odoo.changes %}
    With local changes {% endif %} {% else %} {{ git_info.odoo.error }} {% endif %}
    Enterprise {% if git_info.enterprise.commit %} {{ git_info.enterprise.commit }} {% if git_info.enterprise.changes %}
    With local changes {% endif %} {% else %} {{ git_info.enterprise.error }} {% endif %}
    Design Themes {% if git_info.themes.commit %} {{ git_info.themes.commit }} {% if git_info.themes.changes %}
    With local changes {% endif %} {% else %} {{ git_info.themes.error }} {% endif %}
    Internal {% if git_info.internal.commit %} {{ git_info.internal.commit }} {% if git_info.internal.changes %}
    With local changes {% endif %} {% else %} {{ git_info.internal.error }} {% endif %}