docker安装启动node-exporter

docker pull prom/node-exporter
docker run -d --name node-exporter -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --net="host" prom/node-exporter --path.procfs=/host/proc --path.sysfs=/host/proc --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
 docker run -d --net='host' -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml  -v $PWD/alert.rules:/etc/prometheus/alert.rules  --name prometheus  prom/prometheus  --config.file=/etc/prometheus/prometheus.yml 
docker run -d –net=’host’ –name=mongo -v $PWD/mongo:/data/db mongo
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.5.3

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
version: '2.2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.3
    container_name: elasticsearch
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

    ulimits:
      memlock:
        soft: -1
        hard: -1

    volumes:
      - esdata1:/usr/share/elasticsearch/data

    ports:
      - 9200:9200

    networks:
      - esnet

  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.3
    container_name: elasticsearch2
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch"

    ulimits:
      memlock:
        soft: -1
        hard: -1

    volumes:
      - esdata2:/usr/share/elasticsearch/data

    networks:
      - esnet



volumes:
  esdata1:
    driver: local

  esdata2:
    driver: local

networks:
  esnet:

重构过程中的一个坑

今天重构别人的代码, 发现有个类成员函数, 把内部的一个map通过引用暴露出来, 导致访问权限泄露, 所有地方都可以绕过类的控制对成员进行访问。 类似这样:
class CTest
{
public:
    std::map<string, STRUCT_DATA> &datas()
    {
        return datas_;  // 返回了内部数据, 修改权限放开
    }

private:
    std::map<string, STRUCT_DATA> datas_;  
}
这样导致要对这个数据进行修改的时候, 改一发而动全身, 不得不去把所有获取过这个数据的地方的逻辑全部看一遍, 防止修改后导致别的地方出现bug. 尽量还是不要这样放开访问权限。 需要更新可以通过函数来访问, 比如:
void Update(const string &key, const STRUCT_DATA &data)
{
    // do something update
} 
这样, 不需要查看这个引用已经被传到哪里, 是如何被修改的。 只需要保证函数参数是ok的即可。

django获取choices的显示值

可以用get_field_display方法

其中field为使用了choices选项的字段名.
比如:

class ExampleModel(models.Model):
    CHOICES = (
        (1, "测试1"),
        (2, "测试2"),
    )
    test_field = models.SmallIntegerField(choices=CHOICES, verbose_name='测试字段')

    def __str__(self):
        return self.get_test_field_display()  # 当test_field=1时, 显示"测试1"

官方文档: 获取choices显示值

部署django

1. 选择python版本

pyenv

安装

curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

或者

pip install --egg pyenv

然后把这几行加到~/.bashrc中

export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

然后执行一下 exec $SHELL 启用新的shell加载了新的bashrc配置就可以了

使用

pyenv install 3.6 就会显示所有3.6.x版本, 可以选择一个来安装

更新

pyenv update

删除

删除$PYENV_ROOT目录, 一般都是~/.pyenv

rm -fr ~/.pyenv

删除~/.bashrc中这几行
export PATH=”~/.pyenv/bin:$PATH”
eval “$(pyenv init -)”
eval “$(pyenv virtualenv-init -)”