Liquid基础语法

摘录文章:

Output输出

简单输出示例:

  1. Hello {{name}}
  2. Hello {{user.name}}
  3. Hello {{ 'tobi' }}

Advanced output: Filters 高级输出:过滤器

输出标记需要的过滤器。过滤器是简单的方法。第一个参数在过滤器的左侧就是过滤器的输入,即需要过滤的内容。过滤器的返回值将是过滤器运行时过滤后的左侧的参数。当没有更多的过滤器,模板会收到结果字符串。

代码示例:

  1. Hello {{ 'tobi' | upcase }}
  2. Hello tobi has {{ 'tobi' | size }} letters!
  3. Hello {{ '*tobi*' | textilize | upcase }}
  4. Hello {{ 'now' | date: "%Y %h" }}

Standard Filters标准过滤器

  • date -时间格式化
  • capitalize-设置输入中的某个单词*
  • downcase-将输入的字符串转换为小写*
  • upcase-将输入的字符串转换为大写
  • first-获得传入的数组的第一个元素
  • last-获得传入的数组的最后一个元素
  • join-用数组的分隔符连接数组中的元素
  • sort-数组中的元素排序
  • map-通过指定的属性过滤数组中的元素
  • size-返回一个数组或字符串的大小
  • escape-转义一个字符串
  • escape_once-返回HTML的转义版本,而不会影响现有的实体转义
  • strip_html-从字符串去除HTML
  • strip_newlines -从字符串中去除所有换行符(\ n)的
  • newline_to_br-用HTML标记替换每个换行符(\ n)
  • replace-替换,例如:{{ 'foofoo' | replace:'foo','bar' }} #=> 'barbar'
  • replace_first-替换第一个,例如: '{{barbar' | replace_first:'bar','foo' }} #=> 'foobar'
  • remove-删除,例如:{{'foobarfoobar' | remove:'foo' }} #=> 'barbar'
  • remove_first-删除第一个,例如:{{ 'barbar' | remove_first:'bar' }} #=> 'bar'
  • truncate-截取字符串到第x个字符
  • truncatewords-截取字符串到第x个词
  • prepend-前置添加字符串,例如:{{ 'bar' | prepend:'foo' }} #=> 'foobar'
  • append-后置追加字符串,例如:{{'foo' | append:'bar' }} #=> 'foobar'
  • minus-减法,例如:{{ 4 | minus:2 }} #=> 2
  • plus-加法,例如:{{'1' | plus:'1' }} #=> '11', {{ 1 | plus:1 }} #=> 2
  • times-乘法,例如:{{ 5 | times:4 }} #=> 20
  • divided_by-除法,例如:{{ 10 | divided_by:2 }} #=> 5
  • split-通过正则表达式切分字符串为数组,例如:{{"a~b" | split:"~" }} #=> ['a','b']
  • modulo-取模,例如:{{ 3 | modulo:2 }} #=> 1

标记

目前支持的标记的列表:

  • assign -将某个值赋给一个变量
  • capture-标记文本赋值给一个变量
  • case-标准的case...when代码块
  • comment-块标记,注释掉该块中的文本
  • cycle-通常在循环中使用的值之间交替,如颜色或DOM类。
  • for-for循环
  • if-标准的if/else代码块
  • include -包含另外一个模版
  • raw-暂时停用标签处理以避免出现语法冲突
  • unless-if的反义词

Comments

注释是最简单的标签,它会隐藏标记的内容。例如:

We made 1 million dollars {% comment %} in losses {% endcomment %} this year.

Raw

Raw暂时禁用标签处理。这是用于生成内容,它使用相互矛盾的语法非常有用。例如:

  1. {% raw %}
  2. In Handlebars, {{ this }} will be HTML-escaped, but {{{ that }}} will not.
  3. {% endraw %}

If / Else

if / else语句对任何其他编程语言都应该是众所周知的。Liquid允许使用if,unless,以及可选的elsifelse,例如:

  1. {% if user %}
  2. Hello {{ user.name }}
  3. {% endif %}
  1. # Same as above
  2. {% if user != null %}
  3. Hello {{ user.name }}
  4. {% endif %}
  1. {% if user.name == 'tobi' %}
  2. Hello tobi
  3. {% elsif user.name == 'bob' %}
  4. Hello bob
  5. {% endif %}
  1. {% if user.name == 'tobi' or user.name == 'bob' %}
  2. Hello tobi or bob
  3. {% endif %}
  1. {% if user.name == 'bob' and user.age > 45 %}
  2. Hello old bob
  3. {% endif %}
  1. {% if user.name != 'tobi' %}
  2. Hello non-tobi
  3. {% endif %}
  1. # Same as above
  2. {% unless user.name == 'tobi' %}
  3. Hello non-tobi
  4. {% endunless %}
  1. # Check for the size of an array
  2. {% if user.payments == empty %}
  3. you never paid !
  4. {% endif %}
  5.  
  6. {% if user.payments.size > 0 %}
  7. you paid !
  8. {% endif %}
  1. {% if user.age > 18 %}
  2. Login here
  3. {% else %}
  4. Sorry, you are too young
  5. {% endif %}
  1. # array = 1,2,3
  2. {% if array contains 2 %}
  3. array includes 2
  4. {% endif %}
  1. # string = 'hello world'
  2. {% if string contains 'hello' %}
  3. string includes 'hello'
  4. {% endif %}

 Case Statement

如果您需要更多的条件,您可以使用case语句:

  1. {% case condition %}
  2. {% when 1 %}
  3. hit 1
  4. {% when 2 or 3 %}
  5. hit 2 or 3
  6. {% else %}
  7. ... else ...
  8. {% endcase %}

例如:

  1. {% case template %}
  2. {% when 'label' %}
  3. // {{ label.title }}
  4. {% when 'product' %}
  5. // {{ product.vendor | link_to_vendor }} / {{ product.title }}
  6. {% else %}
  7. // {{page_title}}
  8. {% endcase %}

Cycle

通常你有不同的颜色或类似的任务之间切换。 Liquid已经内置了对此类操作的支持,使用cycle标记。

  1. {% cycle 'one', 'two', 'three' %}
  2. {% cycle 'one', 'two', 'three' %}
  3. {% cycle 'one', 'two', 'three' %}
  4. {% cycle 'one', 'two', 'three' %}

结果为:

  1. one
  2. two
  3. three
  4. one

如果未提供循环体的名称,那么它假设用同样的参数多次调用同一个循环体。

如果你想完全控制循环体,您可以选择指定循环体的名称。这甚至可以是一个变量。

  1. {% cycle 'group 1': 'one', 'two', 'three' %}
  2. {% cycle 'group 1': 'one', 'two', 'three' %}
  3. {% cycle 'group 2': 'one', 'two', 'three' %}
  4. {% cycle 'group 2': 'one', 'two', 'three' %}

得到结果为:

  1. one
  2. two
  3. one
  4. two

For loops

Liquid 可以使用for遍历集合。

  1. {% for item in array %}
  2. {{ item }}
  3. {% endfor %}

当遍历一个键值对集合时,item[0]是key的值,item[1]则是value的值。

  1. {% for item in hash %}
  2. {{ item[0] }}: {{ item[1] }}
  3. {% endfor %}

在每次for循环中,下面的辅助变量可用于额外的需求:

  1. forloop.length # => 整个for循环的长度
  2. forloop.index # => 当前迭代的索引
  3. forloop.index0 # => 当前迭代的索引(从0开始)
  4. forloop.rindex # => 剩余的迭代次数
  5. forloop.rindex0 # => 剩余的迭代次数(从0开始)
  6. forloop.first # => 是否是第一次迭代?
  7. forloop.last # => 是否是最后一次迭代?

你还可以使用多个属性来过滤循环中的内容。

limit:int可以限制你有多少个项目获得 offset:int可以让你从第n项开始遍历。

  1. # array = [1,2,3,4,5,6]
  2. {% for item in array limit:2 offset:2 %}
  3. {{ item }}
  4. {% endfor %}
  5. # results in 3,4

倒序循环

  1. {% for item in collection reversed %}
  2. {{item}}
  3. {% endfor %}

你可以通过定义一系列的数字来代替现有的集合循环。范围可以通过包括文本和变量的数字来定义:

  1. # ...
  2. {% ..item.quantity) %}
  3. {{ i }}
  4. {% endfor %}
  5. # results ,,,

Variable Assignment

您可以将数据存储在自己的变量,在输出或其他标记随意使用。创建一个变量最简单的方法是使用assign标签,它有一个非常简单的语法:

  1. {% assign name = 'freestyle' %}
  2.  
  3. {% for t in collections.tags %}
  4. {% if t == name %}
  5. Freestyle!
  6. {% endif %}
  7. {% endfor %}

这样做的另一种方法是将分配true / false值的变量:

  1. {% assign freestyle = false %}
  2.  
  3. {% for t in collections.tags %}
  4. {% if t == 'freestyle' %}
  5. {% assign freestyle = true %}
  6. {% endif %}
  7. {% endfor %}
  8.  
  9. {% if freestyle %}
  10. Freestyle!
  11. {% endif %}
  1. 如果你想将多个字符串合并成一个单一的字符串,并将其保存到变量中,你可以使用capture标记。这个标签“捕获”内容无论它是否已经实现,然后分配捕获的值。而不是只能捕获屏幕上已经存在的内容。
  1. {% capture attribute_name %}{{ item.title | handleize }}-{{ i }}-color{% endcapture %}
  2. <label for="{{ attribute_name }}">Color:</label>
  3. <select id="{{ attribute_name }}" name="attributes[{{ attribute_name }}]">
  4. <option value="red">Red</option>
  5. <option value="green">Green</option>
  6. <option value="blue">Blue</option>
  7. </select>

 

摘自:
https://www.bbsmax.com/A/GBJrna7qJ0/

参考:

Liquid语法
https://www.jianshu.com/p/4224b8ea0ec0
Liquid
https://liquid.bootcss.com/basics/introduction/
开源模板语言Liquid
https://blog.csdn.net/Bi_ZhiAn/article/details/72547958

.

 

Geoserver发布离线瓦片卫星图TIF格式

摘录自: https://blog.csdn.net/qq_40482342/article/details/101770603

 

看了诸多关于geoserver发布离线瓦片的博客,发现别人的瓦片下载方式和工具跟我的不太相同,而且对与新人来说有点难以看明白,鄙人就写这样的一篇博客,给大家提供下我的用geoserver发布离线的瓦片图
本人自己的方法不足之处还望指出
我在这里发布的是通过全能地图下载器下载的瓦片地图CSDN下载:https://download.csdn.net/download/qq_40482342/11830501(百度网盘:链接: https://pan.baidu.com/s/1PNNYr7HhGaGlRCJmZis3pg 提取码: k546 ),由于geoserver不能直接将瓦片图发布进去当然还有别的办法可以,这里只讲这种稍微简单的发布方式***,然后通过全能地图拼接的tif格式的图发布到geoserver上这里下载和拼接消耗的时间比较久*然后将下载好的tif的图通过geoserver发布,注意这里的tif图是对应的不同级别的图,要按级别发布。最后再将不同图层的切片文件拷到一个图层中.
详细教程如下
下载全能地图下载器 ,然后选择要下载的地图级别,下载完成点击 “是” 拼接成tif格式的地图

--

--

创建一个工作区,用来存储项目图层,命名随意

添加数据存储,选择发布tif格式,将自己下载好的tif地图上传

命名随意,但自己要知道发布的tif是哪个图层的
随后就会弹出新建图层界面,点击发布即可

下面就是跟平常发布图层一样的添加,只不过值得注意的是自己的投影坐标要和自己下载的坐标系要想对应,不然的话,图层级别可能会不太匹配,导致自己发布的地图模糊;

选择Tile Caching 设置自己对应的图层级别,注意坐标系要相同

如果坐标系不同,请在 add grid subost 选择对应的坐标在添加,如果 add grid subost 中没有,请在Gridsets中添加对应的坐标投影

最后发布,之后将自己下载的全部tif的地图像这样发布发布完成后进行如下操作:
点击Tile Layers 找到之前发布的图层 点击seed/Truncate

之后会弹出如下界面:
注意这里的投影坐标和层级要对应发布图层的等级
然后提交生成缓存

最后在 geoserver的data_dir\gwc文件夹中找到对应的地图缓存,把它们复制到一个文件夹
,可以是1级图层的文件夹中, 我这里只发布了 8到13级 所有我将所有的地图缓存,把它们复制到8级文件夹中了

然后修改8级图层的Tile Caching中的发布级别 根据自己发布的图层级别 调节最大值和最小值 我这里是8到13级

最后 如下就能查看不同级别的瓦片图了

————————————————
版权声明:本文为CSDN博主「RNG_Never give up」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40482342/article/details/101770603

visual studio 编译常用变量

 

 

$(BaseOutputPath) 默认值 bin\。

$(PlatformName) 默认值是 $(Platform),而 $(Platform) 的默认值是 AnyCPU;
当这个值等于 AnyCPU 的时候,这个值就不会出现在路径中。

$(Configuration) 默认值是 Debug。

$(RuntimeIdentifier) 这个值和 $(PlatformTarget) 互为默认值,任何一个先设置都会影响另一个;此值即 x86、x64 等标识符。
可以通过 $(AppendRuntimeIdentifierToOutputPath) 属性指定是否将此加入到输出路径中。

$(TargetFramework) 这是在 csproj 文件中强制要求指定的,如果不设置的话项目是无法编译的;
可以通过 $(AppendTargetFrameworkToOutputPath) 属性指定是否将此加入到输出路径中。

 

 

 

 

 

 

Java 三层架构(命名规则)(转贴)

简单介绍经典三层架构

表示层(web层)、业务逻辑层(service层)、数据访问层(dao层),用一张图来描述这其中的关系

现在只学习Servlet,Jsp,所以在表示层中就放的是Servlet和Jsp了,如果学了3大框架,Struts、Hibernate、Spring、会发现Struts是处理表示层的一个框架,而Hibernate是在dao层的一个框架,spring就是service层了。

经典三层架构和MVC的关系

他们是两个毫无相关的东西,经典三层架构是一种分层思想,将开发模式分为了这三层,每个人根据自己的专长,开发不同的模块,比如,前端工程师,那么就专研表示层即可,想办法如何让页面变的更好看,如何吸引别人,而有些专门做数据库工作的人,就可以只关注操作数据库的活,如何让查询更加快速有效,而不必关注数据该如何显示这种问题。这就是分层带来的巨大好处,而MVC是一种设计模式,目的是让HTML代码和业务逻辑代码分开,让代码看起来更加清晰,便于开发。硬说他们有关系的话,只能说他们有共同的点,分层,解耦。实际项目中的包命名结构,其也是按照三层架构思想来进行编写代码的,脑袋里要保持着这种思想进行开发。

命名规则(xxx:代表公司名称  yyy:代表项目名称)

com.xxx.yyy.dao      dao层接口
com.xxx.yyy.dao.impl    dao层实现
com.xxx.yyy.service    service层接口
com.xxx.yyy.service.impl  service层实现
com.xxx.yyy.web      web层
com.xxx.yyy.util      工具包
com.xxx.yyy.domain    javabean

转自:

https://www.cnblogs.com/weibanggang/p/9496837.html

 

 

 

innodb_flush_log_at_trx_commit和sync_binlog参数

innodb_flush_log_at_trx_commit和sync_binlog是MySQL innodb引擎的两个重要的参数,其中innodb_flush_log_at_trx_commit是将事务日志从innodb log buffer写入到redo log中,sync_binlog是将二进制日志文件刷新到磁盘上。

innodb事务日志redo,binlog逻辑过程如下:
1.事务写入redo log buffer中;
2.将log buffer刷新到redo log中,不过会先写一个TX PREPARE标记;
3.写binlog
4.在redo log中写入TX COMMIT标记;
5.将写binlog成功的标记写入redo log。

参数解析如下:
innodb_flush_log_at_trx_commit = N:

N=0    每隔一秒,把事务日志缓存区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上;
log buffer 会 每秒写入到日志文件并刷写(flush)到磁盘。但每次事务提交不会有任何影响,也就是 log buffer 的刷写操作和事务提交操作没有关系。在这种情况下,MySQL性能最好,但如果 mysqld 进程崩溃,通常会导致最后 1s 的日志丢失。

N=1    每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上;
当取值为 1 时,每次事务提交时,log buffer 会被写入到日志文件并刷写到磁盘。这也是默认值。这是最安全的配置,但由于每次事务都需要进行磁盘I/O,所以也最慢。

N=2    每事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度;
当取值为 2 时,每次事务提交会写入日志文件,但并不会立即刷写到磁盘,日志文件会每秒刷写一次到磁盘。这时如果 mysqld 进程崩溃,由于日志已经写入到系统缓存,所以并不会丢失数据;在操作系统崩溃的情况下,通常会导致最后 1s 的日志丢失。
上面说到的「最后 1s」并不是绝对的,有的时候会丢失 更多数据。有时候由于调度的问题,每秒刷写(once-per-second flushing)并不能保证 100% 执行。对于一些数据一致性和完整性要求不高的应用,配置为 2 就足够了;如果为了最高性能,可以设置为 0。有些应用,如支付服务,对一致性和完整性要求很高,所以即使最慢,也最好设置为 1.
当我们设置为2 的时候,Log Thread 会在我们每次事务结束的时候将数据写入事务日志,但是这里的写入仅仅是调用了文件系统的文件写入操作。而我们的文件系统都是有缓存机制的,所以Log Thread 的这个写入并不能保证内容真的已经写入到物理磁盘上面完成持久化的动作。文件系统什么时候会将缓存中的这个数据同步到物理磁盘文件Log Thread 就完全不知道了。所以,当设置为2 的时候,MySQL Crash 并不会造成数据的丢失,但是OS Crash 或者是主机断电后可能丢失的数据量就完全控制在文件系统上了。各种文件系统对于自己缓存的刷新机制各不一样,大家可以自行参阅相关的手册。

sync_binlog =  N:

N>0    每向二进制日志文件写入N条SQL或N个事务后,则把二进制日志文件的数据刷新到磁盘上;
N=0    不主动刷新二进制日志文件的数据到磁盘上,而是由操作系统决定;

推荐配置组合:

N=1,1  — 适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如充值消费系统;
N=1,0  — 适合数据安全性要求高,磁盘IO写能力支持业务不富余,允许备库落后或无复制;
N=2,0或2,m(0<m<100)  — 适合数据安全性有要求,允许丢失一点事务日志,复制架构的延迟也能接受;
N=0,0  — 磁盘IO写能力有限,无复制或允许复制延迟稍微长点能接受,例如:日志性登记业务;
当两个参数设置为双1的时候,写入性能最差,sync_binlog=N (N>1 ) innodb_flush_log_at_trx_commit=2 时,(在当前模式下)MySQL的写操作才能达到最高性能。

数据安全性

当innodb_flush_log_at_trx_commit和sync_binlog  都为1时是最安全的,在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。但是鱼与熊掌不可兼得,都为1会导致频繁的IO操作,因此该模式也是最慢的一种方式。
当innodb_flush_log_at_trx_commit设置为0,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。
当innodb_flush_log_at_trx_commit设置为2,只有在操作系统崩溃或者系统掉电的情况下,上一秒钟所有事务数据才可能丢失。

双1适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如订单,交易,充值,支付消费系统。双1模式下,当磁盘IO无法满足业务需求时,推荐的做法是innodb_flush_log_at_trx_commit=2 ,sync_binlog=N (N为500 或1000) 且使用带蓄电池后备电源的缓存cache,防止系统断电异常。

---------------------

作者:thundermeng
来源:CSDN
原文:https://blog.csdn.net/thundermeng/article/details/50448614
版权声明:本文为博主原创文章,转载请附上博文链接!

 

-----------------------------------------------

innodb_flush_log_at_trx_commit

该参数控制重做日志写入磁盘的过程。我们知道 InnoDB 使用“Write Ahead Log”策略来避免数据丢失问题,即依靠重做日志来保证数据能在丢失后进行恢复。因此,InnoDB 重做日志的持久化非常重要。

该参数的有效值有 012

  • 0: 事务提交时,不将重做日志缓冲写入磁盘,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘。因此如果 MySQL 发生宕机,那么就有可能丢失一部分事务。
  • 1: 事务提交时,会将重做日志缓冲写入磁盘,并且立即刷新(fsync())。注意,因为操作系统的“延迟写”特性,此时的刷入只是写到了操作系统的缓冲区中,因此执行同步操作才能保证一定持久化到了硬盘中。
  • 2: 事务提交时,会将重做日志缓冲写入磁盘,但是不会立即进行刷新操作,因此只是写到了操作系统的缓冲区。此时若操作系统发生宕机而没有即使的同步,也可能会丢失一部分数据。

影响

  • 当设置为0,该模式速度最快,但不太安全,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。
  • 当设置为1,该模式是最安全的,但也是最慢的一种方式。在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。。
  • 当设置为2,该模式速度较快,也比0安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。

sync_binlog

该参数控制着二进制日志写入磁盘的过程。

该参数的有效值为01N

  • 0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync()),此时只是写入了操作系统缓冲,若操作系统宕机则会丢失部分二进制日志。
  • 1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。
  • N:每写N次操作系统缓冲就执行一次刷新操作。

作者:风亡小窝
链接:https://www.jianshu.com/p/a767b2665eda
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

org.aooshi.j 本地化依赖方法

服务依赖本地引用方法文档

For java

 

库列表

aooshi-j-util 基础工具库
aooshi-j-numberserver-client 数值服务客户端

 

源码库地址

aooshi-j-util https://github.com/aooshi/aooshi-j-util
aooshi-j-numberserver-client https://github.com/aooshi/aooshi-j-numberserver-client

 

本地项目步骤

  1. 创建本地主目录 {you work directory}/org.aooshi.j
  2. 克隆 aooshi-j-util 至 本地目录中,例:/{you work directory}/org.aooshi.j/aooshi-j-util
  3. 克隆aooshi-j-numberserver-client 至 本地目录中,例:/{you work directory}/org.aooshi.j/ aooshi-j-numberserver-client
  4. 若需要其它,则按上述例子,克隆更多项目
  5. idea 导入项止,选择{you work directory}/org.aooshi.j 主目录(非某一项止),在选项页中钩选“Search for projects recursively” 选择,即搜索子项目
  6. 选中全部项目,一次性导入所有子项
  7. 通过 maven 工具,对每一个字段进行 install 安装
  8. 结束

 

项目引用

  1. xml
  2. 对需要的项目名称进行引用,如 aooshi-j-util

<dependency>
<groupId>org.aooshi.j</groupId>
<artifactId>aooshi-j-util</artifactId>
<version>1.0.0</version>
</dependency>

<dependency>
<groupId>org.aooshi.j</groupId>
<artifactId> aooshi-j-numberserver-client </artifactId>
<version>1.0.0</version>
</dependency>

 

使用方式一: 实例化方式

NumberServerClient numberServerClient = new NumberServerClient();
numberServerClient.setApiPass("");
numberServerClient.setApiUser("");
numberServerClient.setApiUrl("");
numberServerClient.get("topic");

 

使用方式一: 注解方式


创建一个本地类,并继承
@Component
public class NumberUtil extends NumberServerClient{   }

使用
@Autowired
private NumberUtil numberUtil;

 

项目配置

格式application.properties
NumberServer.ApiUrl=http://192.168.199.85:8021/
NumberServer.ApiUser=1
NumberServer.ApiPass=4pzPwZ45ajMMbhQpmwPJsZZc757SHHpG 

格式application.yml
NumberServer:
ApiUrl: http://192.168.199.85:8021/
ApiUser: 1
ApiPass: 4pzPwZ45ajMMbhQpmwPJsZZc757SHHpG

配置中的地址,用户,密码 均为你的应用所分配的配置

 

 

 

Cacti被监控机器 配置 snmp 协议 | OID

SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。
snmpd.conf的配置项很多,但是真正常用的就那么几个,下面来逐个介绍。
打开配置文件 只看重要部分
vi /etc/snmp/snmpd.conf

第一步 com2sec命令:

映射一个公共名称到 安全账户,这个公共名称是外部访问的标识,也可以把这个公共名称理解成密码,
source用来确定连接源,default默认为任何查询来源。
# First, map the community name "public" into a "security name"
# sec.name        source          community
com2sec notConfigUser  default       public
com2sec tom  192.168.1.2       passwd        新增一个密码为passwd、用户名为tom的账户,只接受192.168.1.2查询
第二部 group 命令:
这里是一个用户组的命令,将一个用户加入一个组中,securityModel表示使用协议(SNMP现在通常用的有3个版本,可选值:v1,v2c,usm)。
####
# Second, map the security name into a group name:
#       groupName      securityModel securityName
group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser
group   rootgroup v2c          tom                           把tom用户加入了rootgroup组,使用v2c协议

第三部 建立视图权限:
#view.name 视图名 #incl/excl 对下面的MIB子树是包括还是排除(included/excluded) #subtree 视图中所涉及的mib子树(文末会总结这些OID码含义) #mask(optional) 掩码

# Third, create a view for us to let the group have rights to:
# Make at least  snmpwalk -v 1 localhost -c public system fast again.
#             name           incl/excl       subtree       mask(optional)
view    systemview    included   .1.3.6.1.2.1.1                   表示systemview这个视图可以查看节点的1.3.6.1.2.1.1  OID权限
view    systemview    included   .1.3.6.1.2.1.25.1.1
view    all                     included   .1                           80            增加一个视图all  权限是.1 (所有)
最后 分配视图权限到组:
# group 安全组名
# context       (v1,v2中为空)
# sec.model 安全模型,可选值:any,v1,v2,usm
# sec.level 安全级别  可选值:auth,noauth,priv,      v1,v2c中只能为noauth
# prefix 前缀。指定context如何与PDU中的context匹配,V3使用
# read   授权的读视图
# write  授权的写视图
# notif  授权的trap视图
# Finally, grant the group read-only access to the systemview view.
#              group          context    sec.model   sec.level     prefix        read           write  notif
access  notConfigGroup ""         any            noauth          exact    systemview   none none
access  rootgroup            ""         any            noauth          exact    all                   none none    增加我的设置
测试一下:
snmpwalk -v 2c -c passwd localhost 1.3.6.1.4.1.9129.1.2.2
snmpwalk可以便利指定节点下的所有子节点,-v 参数指定SNMP的协议版本,这个跟我们之前配置服务器的版本是要一致的,也就是2c,然后-c参数就指定了community的字符串,也就是刚才定义的magus,然后就是主机地址,由于我在本机测试,所以用的localhost,实际中可以填上IP,最后就是OID的值。搞定!

SNMP监控一些常用OID的总结

系统参数(1.3.6.1.2.1.1)

OID

描述

备注

请求方式

.1.3.6.1.2.1.1.1.0

获取系统基本信息

SysDesc

GET

.1.3.6.1.2.1.1.3.0

监控时间

sysUptime

GET

.1.3.6.1.2.1.1.4.0

系统联系人

sysContact

GET

.1.3.6.1.2.1.1.5.0

获取机器名

SysName

GET

.1.3.6.1.2.1.1.6.0

机器坐在位置

SysLocation

GET

.1.3.6.1.2.1.1.7.0

机器提供的服务

SysService

GET

.1.3.6.1.2.1.25.4.2.1.2

系统运行的进程列表

hrSWRunName

WALK

.1.3.6.1.2.1.25.6.3.1.2

系统安装的软件列表

hrSWInstalledName

WALK

网络接口(1.3.6.1.2.1.2)

OID

描述

备注

请求方式

.1.3.6.1.2.1.2.1.0

网络接口的数目

IfNumber

GET

.1.3.6.1.2.1.2.2.1.2

网络接口信息描述

IfDescr

WALK

.1.3.6.1.2.1.2.2.1.3

网络接口类型

IfType

WALK

.1.3.6.1.2.1.2.2.1.4

接口发送和接收的最大IP数据报[BYTE]

IfMTU

WALK

.1.3.6.1.2.1.2.2.1.5

接口当前带宽[bps]

IfSpeed

WALK

.1.3.6.1.2.1.2.2.1.6

接口的物理地址

IfPhysAddress

WALK

.1.3.6.1.2.1.2.2.1.8

接口当前操作状态[up|down]

IfOperStatus

WALK

.1.3.6.1.2.1.2.2.1.10

接口收到的字节数

IfInOctet

WALK

.1.3.6.1.2.1.2.2.1.16

接口发送的字节数

IfOutOctet

WALK

.1.3.6.1.2.1.2.2.1.11

接口收到的数据包个数

IfInUcastPkts

WALK

.1.3.6.1.2.1.2.2.1.17

接口发送的数据包个数

IfOutUcastPkts

WALK

CPU及负载

OID

描述

备注

请求方式

. 1.3.6.1.4.1.2021.11.9.0

用户CPU百分比

ssCpuUser

GET

. 1.3.6.1.4.1.2021.11.10.0

系统CPU百分比

ssCpuSystem

GET

. 1.3.6.1.4.1.2021.11.11.0

空闲CPU百分比

ssCpuIdle

GET

. 1.3.6.1.4.1.2021.11.50.0

原始用户CPU使用时间

ssCpuRawUser

GET

.1.3.6.1.4.1.2021.11.51.0

原始nice占用时间

ssCpuRawNice

GET

. 1.3.6.1.4.1.2021.11.52.0

原始系统CPU使用时间

ssCpuRawSystem.

GET

. 1.3.6.1.4.1.2021.11.53.0

原始CPU空闲时间

ssCpuRawIdle

GET

. 1.3.6.1.2.1.25.3.3.1.2

CPU的当前负载,N个核就有N个负载

hrProcessorLoad

WALK

. 1.3.6.1.4.1.2021.11.3.0

ssSwapIn

GET

. 1.3.6.1.4.1.2021.11.4.0

SsSwapOut

GET

. 1.3.6.1.4.1.2021.11.5.0

ssIOSent

GET

. 1.3.6.1.4.1.2021.11.6.0

ssIOReceive

GET

. 1.3.6.1.4.1.2021.11.7.0

ssSysInterrupts

GET

. 1.3.6.1.4.1.2021.11.8.0

ssSysContext

GET

. 1.3.6.1.4.1.2021.11.54.0

ssCpuRawWait

GET

. 1.3.6.1.4.1.2021.11.56.0

ssCpuRawInterrupt

GET

. 1.3.6.1.4.1.2021.11.57.0

ssIORawSent

GET

. 1.3.6.1.4.1.2021.11.58.0

ssIORawReceived

GET

. 1.3.6.1.4.1.2021.11.59.0

ssRawInterrupts

GET

. 1.3.6.1.4.1.2021.11.60.0

ssRawContexts

GET

. 1.3.6.1.4.1.2021.11.61.0

ssCpuRawSoftIRQ

GET

. 1.3.6.1.4.1.2021.11.62.0

ssRawSwapIn.

GET

. 1.3.6.1.4.1.2021.11.63.0

ssRawSwapOut

GET

.1.3.6.1.4.1.2021.10.1.3.1

Load5

GET

.1.3.6.1.4.1.2021.10.1.3.2

Load10

GET

.1.3.6.1.4.1.2021.10.1.3.3

Load15

GET

内存及磁盘(1.3.6.1.2.1.25)

OID

描述

备注

请求方式

.1.3.6.1.2.1.25.2.2.0

获取内存大小

hrMemorySize

GET

.1.3.6.1.2.1.25.2.3.1.1

存储设备编号

hrStorageIndex

WALK

.1.3.6.1.2.1.25.2.3.1.2

存储设备类型

hrStorageType[OID]

WALK

.1.3.6.1.2.1.25.2.3.1.3

存储设备描述

hrStorageDescr

WALK

.1.3.6.1.2.1.25.2.3.1.4

簇的大小

hrStorageAllocationUnits

WALK

.1.3.6.1.2.1.25.2.3.1.5

簇的的数目

hrStorageSize

WALK

.1.3.6.1.2.1.25.2.3.1.6

使用多少,跟总容量相除就是占用率

hrStorageUsed

WALK

.1.3.6.1.4.1.2021.4.3.0

Total Swap Size(虚拟内存)

memTotalSwap

GET

.1.3.6.1.4.1.2021.4.4.0

Available Swap Space

memAvailSwap

GET

.1.3.6.1.4.1.2021.4.5.0

Total RAM in machine

memTotalReal

GET

.1.3.6.1.4.1.2021.4.6.0

Total RAM used

memAvailReal

GET

.1.3.6.1.4.1.2021.4.11.0

Total RAM Free

memTotalFree

GET

.1.3.6.1.4.1.2021.4.13.0

Total RAM Shared

memShared

GET

.1.3.6.1.4.1.2021.4.14.0

Total RAM Buffered

memBuffer

GET

.1.3.6.1.4.1.2021.4.15.0

Total Cached Memory

memCached

GET

.1.3.6.1.4.1.2021.9.1.2

Path where the disk is mounted

dskPath

WALK

.1.3.6.1.4.1.2021.9.1.3

Path of the device for the partition

dskDevice

WALK

.1.3.6.1.4.1.2021.9.1.6

Total size of the disk/partion (kBytes)

dskTotal

WALK

.1.3.6.1.4.1.2021.9.1.7

Available space on the disk

dskAvail

WALK

.1.3.6.1.4.1.2021.9.1.8

Used space on the disk

dskUsed

WALK

.1.3.6.1.4.1.2021.9.1.9

Percentage of space used on disk

dskPercent

WALK

.1.3.6.1.4.1.2021.9.1.10

Percentage of inodes used on disk

dskPercentNode

WALK

System Group
sysDescr 1.3.6.1.2.1.1.1
sysObjectID 1.3.6.1.2.1.1.2
sysUpTime 1.3.6.1.2.1.1.3
sysContact 1.3.6.1.2.1.1.4
sysName 1.3.6.1.2.1.1.5
sysLocation 1.3.6.1.2.1.1.6
sysServices 1.3.6.1.2.1.1.7
Interfaces Group
ifNumber 1.3.6.1.2.1.2.1
ifTable 1.3.6.1.2.1.2.2
ifEntry 1.3.6.1.2.1.2.2.1
ifIndex 1.3.6.1.2.1.2.2.1.1
ifDescr 1.3.6.1.2.1.2.2.1.2
ifType 1.3.6.1.2.1.2.2.1.3
ifMtu 1.3.6.1.2.1.2.2.1.4
ifSpeed 1.3.6.1.2.1.2.2.1.5
ifPhysAddress 1.3.6.1.2.1.2.2.1.6
ifAdminStatus 1.3.6.1.2.1.2.2.1.7
ifOperStatus 1.3.6.1.2.1.2.2.1.8
ifLastChange 1.3.6.1.2.1.2.2.1.9
ifInOctets 1.3.6.1.2.1.2.2.1.10
ifInUcastPkts 1.3.6.1.2.1.2.2.1.11
ifInNUcastPkts 1.3.6.1.2.1.2.2.1.12
ifInDiscards 1.3.6.1.2.1.2.2.1.13
ifInErrors 1.3.6.1.2.1.2.2.1.14
ifInUnknownProtos 1.3.6.1.2.1.2.2.1.15
ifOutOctets 1.3.6.1.2.1.2.2.1.16
ifOutUcastPkts 1.3.6.1.2.1.2.2.1.17
ifOutNUcastPkts 1.3.6.1.2.1.2.2.1.18
ifOutDiscards 1.3.6.1.2.1.2.2.1.19
ifOutErrors 1.3.6.1.2.1.2.2.1.20
ifOutQLen 1.3.6.1.2.1.2.2.1.21
ifSpecific 1.3.6.1.2.1.2.2.1.22
IP Group
ipForwarding 1.3.6.1.2.1.4.1
ipDefaultTTL 1.3.6.1.2.1.4.2
ipInReceives 1.3.6.1.2.1.4.3
ipInHdrErrors 1.3.6.1.2.1.4.4
ipInAddrErrors 1.3.6.1.2.1.4.5
ipForwDatagrams 1.3.6.1.2.1.4.6
ipInUnknownProtos 1.3.6.1.2.1.4.7
ipInDiscards 1.3.6.1.2.1.4.8
ipInDelivers 1.3.6.1.2.1.4.9
ipOutRequests 1.3.6.1.2.1.4.10
ipOutDiscards 1.3.6.1.2.1.4.11
ipOutNoRoutes 1.3.6.1.2.1.4.12
ipReasmTimeout 1.3.6.1.2.1.4.13
ipReasmReqds 1.3.6.1.2.1.4.14
ipReasmOKs 1.3.6.1.2.1.4.15
ipReasmFails 1.3.6.1.2.1.4.16
ipFragsOKs 1.3.6.1.2.1.4.17
ipFragsFails 1.3.6.1.2.1.4.18
ipFragCreates 1.3.6.1.2.1.4.19
ipAddrTable 1.3.6.1.2.1.4.20
ipAddrEntry 1.3.6.1.2.1.4.20.1
ipAdEntAddr 1.3.6.1.2.1.4.20.1.1
ipAdEntIfIndex 1.3.6.1.2.1.4.20.1.2
ipAdEntNetMask 1.3.6.1.2.1.4.20.1.3
ipAdEntBcastAddr 1.3.6.1.2.1.4.20.1.4
ipAdEntReasmMaxSize 1.3.6.1.2.1.4.20.1.5
ICMP Group
icmpInMsgs 1.3.6.1.2.1.5.1
icmpInErrors 1.3.6.1.2.1.5.2
icmpInDestUnreachs 1.3.6.1.2.1.5.3
icmpInTimeExcds 1.3.6.1.2.1.5.4
icmpInParmProbs 1.3.6.1.2.1.5.5
icmpInSrcQuenchs 1.3.6.1.2.1.5.6
icmpInRedirects 1.3.6.1.2.1.5.7
icmpInEchos 1.3.6.1.2.1.5.8
icmpInEchoReps 1.3.6.1.2.1.5.9
icmpInTimestamps 1.3.6.1.2.1.5.10
icmpInTimestampReps 1.3.6.1.2.1.5.11
icmpInAddrMasks 1.3.6.1.2.1.5.12
icmpInAddrMaskReps 1.3.6.1.2.1.5.13
icmpOutMsgs 1.3.6.1.2.1.5.14
icmpOutErrors 1.3.6.1.2.1.5.15
icmpOutDestUnreachs 1.3.6.1.2.1.5.16
icmpOutTimeExcds 1.3.6.1.2.1.5.17
icmpOutParmProbs 1.3.6.1.2.1.5.18
icmpOutSrcQuenchs 1.3.6.1.2.1.5.19
icmpOutRedirects 1.3.6.1.2.1.5.20
icmpOutEchos 1.3.6.1.2.1.5.21
icmpOutEchoReps 1.3.6.1.2.1.5.22
icmpOutTimestamps 1.3.6.1.2.1.5.23
icmpOutTimestampReps 1.3.6.1.2.1.5.24
icmpOutAddrMasks 1.3.6.1.2.1.5.25
icmpOutAddrMaskReps 1.3.6.1.2.1.5.26
TCP Group
tcpRtoAlgorithm 1.3.6.1.2.1.6.1
tcpRtoMin 1.3.6.1.2.1.6.2
tcpRtoMax 1.3.6.1.2.1.6.3
tcpMaxConn 1.3.6.1.2.1.6.4
tcpActiveOpens 1.3.6.1.2.1.6.5
tcpPassiveOpens 1.3.6.1.2.1.6.6
tcpAttemptFails 1.3.6.1.2.1.6.7
tcpEstabResets 1.3.6.1.2.1.6.8
tcpCurrEstab 1.3.6.1.2.1.6.9
tcpInSegs 1.3.6.1.2.1.6.10
tcpOutSegs 1.3.6.1.2.1.6.11
tcpRetransSegs 1.3.6.1.2.1.6.12
tcpConnTable 1.3.6.1.2.1.6.13
tcpConnEntry 1.3.6.1.2.1.6.13.1
tcpConnState 1.3.6.1.2.1.6.13.1.1
tcpConnLocalAddress 1.3.6.1.2.1.6.13.1.2
tcpConnLocalPort 1.3.6.1.2.1.6.13.1.3
tcpConnRemAddress 1.3.6.1.2.1.6.13.1.4
tcpConnRemPort 1.3.6.1.2.1.6.13.1.5
tcpInErrs 1.3.6.1.2.1.6.14
tcpOutRsts 1.3.6.1.2.1.6.15
UDP Group
udpInDatagrams 1.3.6.1.2.1.7.1
udpNoPorts 1.3.6.1.2.1.7.2
udpInErrors 1.3.6.1.2.1.7.3
udpOutDatagrams 1.3.6.1.2.1.7.4
udpTable 1.3.6.1.2.1.7.5
udpEntry 1.3.6.1.2.1.7.5.1
udpLocalAddress 1.3.6.1.2.1.7.5.1.1
udpLocalPort 1.3.6.1.2.1.7.5.1.2
SNMP Group
snmpInPkts 1.3.6.1.2.1.11.1
snmpOutPkts 1.3.6.1.2.1.11.2
snmpInBadVersions 1.3.6.1.2.1.11.3
snmpInBadCommunityNames 1.3.6.1.2.1.11.4
snmpInBadCommunityUses 1.3.6.1.2.1.11.5
snmpInASNParseErrs 1.3.6.1.2.1.11.6
NOT USED 1.3.6.1.2.1.11.7
snmpInTooBigs 1.3.6.1.2.1.11.8
snmpInNoSuchNames 1.3.6.1.2.1.11.9
snmpInBadValues 1.3.6.1.2.1.11.10
snmpInReadOnlys 1.3.6.1.2.1.11.11
snmpInGenErrs 1.3.6.1.2.1.11.12
snmpInTotalReqVars 1.3.6.1.2.1.11.13
snmpInTotalSetVars 1.3.6.1.2.1.11.14
snmpInGetRequests 1.3.6.1.2.1.11.15
snmpInGetNexts 1.3.6.1.2.1.11.16
snmpInSetRequests 1.3.6.1.2.1.11.17
snmpInGetResponses 1.3.6.1.2.1.11.18
snmpInTraps 1.3.6.1.2.1.11.19
snmpOutTooBigs 1.3.6.1.2.1.11.20
snmpOutNoSuchNames 1.3.6.1.2.1.11.21
snmpOutBadValues 1.3.6.1.2.1.11.22
NOT USED 1.3.6.1.2.1.11.23
snmpOutGenErrs 1.3.6.1.2.1.11.24
snmpOutGetRequests 1.3.6.1.2.1.11.25
snmpOutGetNexts 1.3.6.1.2.1.11.26
snmpOutSetRequests 1.3.6.1.2.1.11.27
snmpOutGetResponses 1.3.6.1.2.1.11.28
snmpOutTraps 1.3.6.1.2.1.11.29
snmpEnableAuthenTraps 1.3.6.1.2.1.11.30

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zonghua521/article/details/78200531

 

CHMOD


-rw------- (600) 只有所有者才有读和写的权限
-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限