[php]数値0と文字の比較

phpで少しはまったのでメモ

<環境>
php 5.3.17

文字と数値比較時、普通は下記の通り数値と文字の比較は false になるが


$nodata = '--';
$value = 1.0;

var_dump($value == $nodata);
var_dump($value === $nodata);
// -----
// bool(false)
// bool(false)

0 と文字の比較は、型まで見ないと false にならない


$nodata = '--';
$value = 0.0;

var_dump($value == $nodata);
var_dump($value === $nodata);
// -----
// bool(true)
// bool(false)

忘れてた..

MuninでApache監視時のメモ

muninでApacheを監視するときのメモ

munin : centos
監視するApache環境 : Windows7、Apache2.2

http://localhost/server-status
が見れるようにする

http.conf
Include conf/extra/httpd-info.conf
→ 有効に(コメントアウトを外す)

LoadModule info_module modules/mod_info.so
→ 有効に(コメントアウトを外す)

LoadModule status_module modules/mod_status.so
→ 有効に(コメントアウトを外す)

httpd-info.conf

SetHandler server-status
Order deny,allow
Deny from all
Allow from .localhost

→ .localhostを環境に合わせる

ExtendedStatus On
→ 有効に(コメントアウトを外す)


SetHandler server-info
Order deny,allow
Deny from all
Allow from .localhost

→ .localhostを環境に合わせる

MuninにPostgreSQLを監視させるときにはまったこと

MuninにPotgreSQLの監視をさせてみる

CentosにMunin version 2.0.12
監視したいのはWindows7(win7)のPostgreSQL
の構成です

Windows7のPostgresは外からアクセスできるようにしておきます

vi /etc/munin/plugin-conf.d/munin-node
にwin7へのpostgresqlの設定をかいて

[snmp_win7_postgres_*]
env.dbhost 192.168.1.100
env.dbport 5432
env.dbname postgres
env.dbuser postgres
env.dbpass password

シンボリックリンクをはって
ln -s /usr/share/munin/plugins/postgres_connections_ ./snmp_win7_postgres_connections_All

ためす
munin-run snmp_win7_postgres_connections_All
→ Unable to detect PostgreSQL version
とエラー

エラー箇所のソースをみるとバージョンが取れない様子
下記の482行目を483行目に直してやると動きました


473 sub get_version {
474     my ($self) = @_;
475
476     return if (defined $self->{detected_version});
477
478     my $r = $self->runquery("SELECT version()");
479     my $v = $r->[0]->[0];
480     die "Unable to detect PostgreSQL version\n"
481 #        unless ($v =~ /^PostgreSQL (\d+)\.(\d+)(\.\d+|devel) on/);
482         unless ($v =~ /^PostgreSQL (\d+)\.(\d+)\.(\d+)/);
483     $self->{detected_version} = "$1.$2";
484 }

Centosの場合


select version();
-----
"PostgreSQL 8.4.13 on i386-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4), 32-bit
"

Windows7の場合


select version();
-----
"PostgreSQL 9.1.1, compiled by Visual C++ build 1500, 32-bit"

これで
munin-run snmp_win7_postgres_connections_All

active.value 0
idle.value 0
idletransaction.value 0
unknown.value 0
waiting.value 0

取れました。

あとは、画面にグラフが出れば…
なにの出てこない

vi /etc/munin/plugin-conf.d/munin-node
にwin7へのpostgresqlの設定を変えてみる
(snmp_win7_postgres_* → postgres_*)

[postgres_*]
env.dbhost 192.168.1.100
env.dbport 5432
env.dbname postgres
env.dbuser postgres
env.dbpass password

画面出て来ました

munin-postgres

ただ、localhostのところへ出てくる…
改良の必要ありです
(Perl覚えようかな)

PostgreSQLでの日付処理

PostgreSQLでの日付の扱いをいつも忘れるのでメモ
下記の結果は、2013/06/14 15時くらいの実行結果です

現在をとるのは


select 
current_timestamp
, now() -- current_timestampと同じ
;

結果
“2013-06-14 15:44:12.078+09”

日付の加算は


select 
 now() + '1 days'
;

結果
“2013-06-15 15:44:12.078+09”

日付を丸めるには


select 
  date_trunc('hour', now())
, date_trunc('day', now())
, date_trunc('month', now())
;

結果
“2013-06-14 15:00:00+09”
“2013-06-14 00:00:00+09”
“2013-06-01 00:00:00+09”

上記を利用すれば
今月1日からのログを表示、なんてできます


select *
from log_table
where settime > date_trunc('month', now());
;