Postgres 日志分析

最近在项目开发过程中发现客户方总是出现卡顿,数据服务器峰值出现驼峰的情况,所以需要分析数据库日志,且ODOO使用的是 Postgres  的数据库,靠眼睛去看那是分析不出啥的。

pgBadger乃是 Postgres 的一个分析工具

项目地址:https://github.com/darold/pgbadger

yum install -y pgbadger
which pgbadger
pgbadger postgresql-* -f syslog

命令执行完成后,会在当前命令执行目录生成一个out.html的文件。

Windows10 OpenSSH 管理服务器

启用SSH客户端

应用和功能——管理可选工具——OpenSSH 客户端

添加密钥

# 查看ssh-agent服务状态
Get-Service | select -property name,starttype,status | Where-Object name -eq ssh-agent
# 设置启动类型为手动
Set-Service -Name ssh-agent -StartupType Manual
# 启动ssh-agent服务
Start-Service ssh-agent
# 添加已有密钥
ssh-add .\xinwei_gitlab.gitlab
添加已有密钥

右键 id_rsa -> 属性 -> 安全 -> 高级 

  • 把所有者改为当前用户(如果是当前用户就不用管了) 
  • 禁用继承 -> 从此对象中删除所有已继承的权限 
  • 添加当前用户,并设置访问类型为完全控制 
设定权限
重新添加

登录SSH

ssh root@jalena.bcsytv.com

Python 转数字为Excel列,转列为数字

def convent_column_to_char(column):
	"""
	将数字转换为Excel列
	1 => A, 2 => B, ......, 27 => AA
	:param column: int
	:return: str
	"""
	if not isinstance(column, int):
		return column
	tStr = str()
	while column != 0:
		res = column % 26
		if res == 0:
			res = 26
			column -= 26
		tStr = chr(ord('A') + res - 1) + tStr
		column = column // 26
	return tStr


def colname_to_num(colname):
	if not isinstance(colname, str):
		return colname
	col = 0
	power = 1

	for i in range(len(colname) - 1, -1, -1):
		ch = colname[i]
		col += (ord(ch) - ord('A') + 1) * power
		power *= 26
	return col


if __name__ == "__main__":
    l = list()
    n = list()
    for a in range(1, 1001):
        l.append(convent_column_to_char(a))
    print(l)
    for a in l:
        n.append(colname_to_num(a))
    print(n)

Odoo 10 Could not execute command lessc

这个问题出现的十分突然,早上打开项目,直接抛出“Could not execute command lessc”这个Error,导致界面加载异常。

现将处理过程做一次分析整理。

再看系统环境变量

启动程序,问题依旧。。

跟进代码

发现 os.environ 这个变量中的PATH里面被覆盖了。

调整启动配置

再次跟进代码
Over...

Odoo Javascript & Widget

定义一个OdooClass

odoo.define('addon_name.service', function (require) {
    "use strict";
    var utils = require('web.utils');
    var Model = require('web.Model');

    // do things with utils and Model
    var something_useful = 15;
    return  {
        something_useful: something_useful,
    };
});

重写记录打开方式

odoo.define('combined_statements.working_papers', function(require) {
    "use strict";
	var core = require('web.core');
	var ListView = require('web.ListView');
	var utils = require('web.utils');
	var web_client = require('web.web_client');
	var Model = require('web.Model');

	var QWeb = core.qweb;
	var _t = core._t;

	/**
	 * 打开工作底稿创建向导页面
	 */
	function open_wording_papers_wizard_action() {
		web_client.action_manager.do_action({
			name: "底稿定义",
			type: "ir.actions.act_window",
			res_model: "working.papers.define.wizard",
			target: 'new',
			xml_id: 'combined_statements.working_papers_define_wizard_form',
			views: [
                [
                    false, 'form'
                ]
            ]
        });
    }

	ListView.include({
        // 为增加按钮绑定点击事件
		render_buttons: function($node) {
			let add_button = false;
			if (!this.$buttons) {
				add_button = true;
            }

			this._super.apply(this, arguments);

			if (add_button) {
				this.$buttons.on('click', '.o_button_open', open_wording_papers_wizard_action.bind(this));
            }
        },
        // 重写Tree视图点击行打开记录的方式
		do_activate_record: function(index, id, dataset, view) {
			if (this.model === 'combined.statements.working.paper') {
				let record = this.records.get(id);
				this.do_action({
					type: "ir.actions.client",
					tag: 'working.papers',
					params: record,
                });
            }else {
				this._super.apply(this, arguments);
            }
        }
    });
});