<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PlanetMysql.ru - информация о СУБД MySQL &#187; Python</title>
	<atom:link href="http://planetmysql.ru/category/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://planetmysql.ru</link>
	<description>Блог о самой популярной СУБД MySQL</description>
	<lastBuildDate>Thu, 29 Jul 2010 23:40:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MySQL Sandbox embraces Python and meets Cluster</title>
		<link>http://datacharmer.blogspot.com/2010/06/mysql-sandbox-embraces-python-and-meets.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mysql-sandbox-embraces-python-and-meets-cluster</link>
		<comments>http://datacharmer.blogspot.com/2010/06/mysql-sandbox-embraces-python-and-meets.html#comments</comments>
		<pubDate>Mon, 28 Jun 2010 20:34:00 +0000</pubDate>
		<dc:creator>Giuseppe Maxia</dc:creator>
				<category><![CDATA[Cluster]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sandbox]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-16959946.post-8101332860596809352</guid>
		<description><![CDATA[ If you have tried Quick start guides: MySQL cluster in 10 minutes, you may have realized that it is really quick and easy.However, it leaves some typing to be done.Users of MySQL Sandbox have a horror of repetitive typing, and this got me thinking. "Could I integrate MySQL Sandbox and Cluster?"The answer was: "Sure."But then I started thinking of all the minor and major changes that I wanted to do to the Sandbox and have delayed for too long. What I need, is a radical refactoring. And then I remembered that it has been almost two years since I learned a new programming language and that perhaps I could expand my horizons and the Sandbox architecture at once. Thus, thanks to an irresistible offer from O'reilly about ebooks, last week I bought both Learning Python, fourth edition and Programming Python, Third edition. During the week end I produced my first tool: a Python script that installs and starts a small cluster, following the instructions given in the MySQL Cluster quick start guides. The script unpacks the cluster tarball, installs a server sandbox from it, then starts the cluster nodes and the MySQL server, and then it monitors the cluster until all the nodes are connected before finally testing the server.Here is a sample run:$ make_cluster.py ~/Downloads/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64.tar.gz++ tar -xzf ~/Downloads/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64.tar.gz++ low_level_make_sandbox --basedir=$HOME/python/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64 --sandbox_directory=mcluster --install_version=5.1 --sandbox_port=5144 --no_ver_after_name --no_run --force --my_clause=log-error=msandbox.err --my_clause=ndbcluster     The MySQL Sandbox,  version 3.0.12    (C) 2006-2010 Giuseppe Maxiainstalling with the following parameters:upper_directory                = $HOME/sandboxessandbox_directory              = mclustersandbox_port                   = 5144check_port                     = no_check_port                  = datadir_from                   = scriptinstall_version                = 5.1basedir                        = $HOME/python/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64tmpdir                         = my_file                        = operating_system_user          = gmaxdb_user                        = msandboxdb_password                    = msandboxmy_clause                      = log-error=msandbox.err ; ndbclusterprompt_prefix                  = mysqlprompt_body                    =  [\h] {\u} (\d) &#62; force                          = 1no_ver_after_name              = 1verbose                        = load_grants                    = 1no_load_grants                 = no_run                         = 1no_show                        = loading grants.. sandbox server startedstopping serverYour sandbox server was installed in $HOME/sandboxes/mcluster++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndb_mgmd -f $HOME/sandboxes/mcluster/my_cluster/conf/config.ini --initial --configdir=$HOME/sandboxes/mcluster/my_cluster/conf/2010-06-28 21:29:57 [MgmtSrvr] INFO     -- NDB Cluster Management Server. mysql-5.1.44 ndb-7.1.4b2010-06-28 21:29:57 [MgmtSrvr] INFO     -- Reading cluster configuration from '$HOME/sandboxes/mcluster/my_cluster/conf/config.ini'++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndbd -c localhost:11862010-06-28 21:29:57 [ndbd] INFO     -- Configuration fetched from 'localhost:1186', generation: 1++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndbd -c localhost:11862010-06-28 21:29:57 [ndbd] INFO     -- Configuration fetched from 'localhost:1186', generation: 1++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndb_mgm -e showConnected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=3 (not connected, accepting connect from localhost)id=4 (not connected, accepting connect from localhost)[ndb_mgmd(MGM)] 1 node(s)id=1 @localhost  (mysql-5.1.44 ndb-7.1.4)[mysqld(API)] 1 node(s)id=50 (not connected, accepting connect from any host)++ $HOME/sandboxes/mcluster/clear++ $HOME/sandboxes/mcluster/start... sandbox server startedPlease wait. Giving the cluster time to catch upConnected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=3 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0, Master)id=4 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)[ndb_mgmd(MGM)] 1 node(s)id=1 @localhost  (mysql-5.1.44 ndb-7.1.4)[mysqld(API)] 1 node(s)id=50 (not connected, accepting connect from any host)It may take up to 2 minutes to initialize ... ( 0 )Connected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=3 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0, Master)id=4 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)[ndb_mgmd(MGM)] 1 node(s)id=1 @localhost  (mysql-5.1.44 ndb-7.1.4)[mysqld(API)] 1 node(s)id=50 (not connected, accepting connect from any host)It may take up to 2 minutes to initialize ... ( 5 )Connected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=3 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0, Master)id=4 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)[ndb_mgmd(MGM)] 1 node(s)id=1 @localhost  (mysql-5.1.44 ndb-7.1.4)[mysqld(API)] 1 node(s)id=50 (not connected, accepting connect from any host)[...]It may take up to 2 minutes to initialize ... ( 100 )Connected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=3 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)id=4 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)[ndb_mgmd(MGM)] 1 node(s)id=1 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4)[mysqld(API)] 1 node(s)id=50 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4)++ $HOME/sandboxes/mcluster/use -vvv -e "create table test.t1(i int not null primary key)engine=ndb"--------------create table test.t1(i int not null primary key)engine=ndb--------------Query OK, 0 rows affected (0.45 sec)++ $HOME/sandboxes/mcluster/use -vvv -e "show create table test.t1\G"--------------show create table test.t1--------------*************************** 1. row ***************************       Table: t1Create Table: CREATE TABLE `t1` (  `i` int(11) NOT NULL,  PRIMARY KEY (`i`)) ENGINE=ndbcluster DEFAULT CHARSET=latin11 row in set (0.00 sec)to shut down the cluster, type:$HOME/python/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndb_mgm -e shutdownIt works! Ans this is a good start to make me feel confident with Python, which I will use to develop MySQL Sandbox version 4. This cluster snippet will probably be made from scratch once the new architecture is in place. For now, it was enough to get the feeling of the language.]]></description>
			<content:encoded><![CDATA[<table border="0"><tbody><tr><td><a href="http://dev.mysql.com/downloads/cluster"><img alt="" border="0" src="http://lh6.ggpht.com/_gVfZHGgf5LA/TCj8kb0M9rI/AAAAAAAAA8I/91e-Zn8NoGQ/sandbox_cluster_python_small.png" title="" /></a> </td><td>If you have tried <a href="http://datacharmer.blogspot.com/2010/06/quick-start-guides-mysql-cluster-in-10.html">Quick start guides: MySQL cluster in 10 minutes</a>, you may have realized that it is really quick and easy.<br />However, it leaves some typing to be done.<br />Users of MySQL Sandbox have a horror of repetitive typing, and this got me thinking. "Could I integrate MySQL Sandbox and Cluster?"<br />The answer was: "Sure."<br />But then I started thinking of all the minor and major changes that I wanted to do to the Sandbox and have delayed for too long. What I need, is a radical refactoring. <br />And then I remembered that it has been almost two years since I learned a new programming language and that perhaps I could expand my horizons and the Sandbox architecture at once. </td></tr></tbody></table>Thus, thanks to an irresistible offer from O'reilly about ebooks, last week I bought both <a href="http://oreilly.com/catalog/9780596158064/">Learning Python, fourth edition</a> and <a href="http://oreilly.com/catalog/9780596009250/">Programming Python, Third edition</a>. <br />During the week end I produced my first tool: a <a href="http://bazaar.launchpad.net/~giuseppe-maxia/mysql-sandbox/mysql-sandbox-3/annotate/head%3A/drafts/make_cluster.py">Python script</a> that installs and starts a small cluster, following the instructions given in the <a href="http://datacharmer.blogspot.com/2010/06/quick-start-guides-mysql-cluster-in-10.html">MySQL Cluster quick start guides</a>. The script unpacks the cluster tarball, installs a server sandbox from it, then starts the cluster nodes and the MySQL server, and then it monitors the cluster until all the nodes are connected before finally testing the server.<br />Here is a sample run:<br /><pre><code><br />$ make_cluster.py ~/Downloads/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64.tar.gz<br /><br />++ tar -xzf ~/Downloads/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64.tar.gz<br /><br />++ low_level_make_sandbox --basedir=$HOME/python/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64 --sandbox_directory=mcluster --install_version=5.1 --sandbox_port=5144 --no_ver_after_name --no_run --force --my_clause=log-error=msandbox.err --my_clause=ndbcluster <br />    The MySQL Sandbox,  version 3.0.12<br />    (C) 2006-2010 Giuseppe Maxia<br />installing with the following parameters:<br />upper_directory                = $HOME/sandboxes<br />sandbox_directory              = mcluster<br />sandbox_port                   = 5144<br />check_port                     = <br />no_check_port                  = <br />datadir_from                   = script<br />install_version                = 5.1<br />basedir                        = $HOME/python/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64<br />tmpdir                         = <br />my_file                        = <br />operating_system_user          = gmax<br />db_user                        = msandbox<br />db_password                    = msandbox<br />my_clause                      = log-error=msandbox.err ; ndbcluster<br />prompt_prefix                  = mysql<br />prompt_body                    =  [\h] {\u} (\d) &gt; <br />force                          = 1<br />no_ver_after_name              = 1<br />verbose                        = <br />load_grants                    = 1<br />no_load_grants                 = <br />no_run                         = 1<br />no_show                        = <br />loading grants<br />.. sandbox server started<br />stopping server<br />Your sandbox server was installed in $HOME/sandboxes/mcluster<br /><br />++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndb_mgmd -f $HOME/sandboxes/mcluster/my_cluster/conf/config.ini --initial --configdir=$HOME/sandboxes/mcluster/my_cluster/conf/<br />2010-06-28 21:29:57 [MgmtSrvr] INFO     -- NDB Cluster Management Server. mysql-5.1.44 ndb-7.1.4b<br />2010-06-28 21:29:57 [MgmtSrvr] INFO     -- Reading cluster configuration from '$HOME/sandboxes/mcluster/my_cluster/conf/config.ini'<br /><br />++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndbd -c localhost:1186<br />2010-06-28 21:29:57 [ndbd] INFO     -- Configuration fetched from 'localhost:1186', generation: 1<br /><br />++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndbd -c localhost:1186<br />2010-06-28 21:29:57 [ndbd] INFO     -- Configuration fetched from 'localhost:1186', generation: 1<br /><br />++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndb_mgm -e show<br />Connected to Management Server at: localhost:1186<br />Cluster Configuration<br />---------------------<br />[ndbd(NDB)] 2 node(s)<br />id=3 (not connected, accepting connect from localhost)<br />id=4 (not connected, accepting connect from localhost)<br /><br />[ndb_mgmd(MGM)] 1 node(s)<br />id=1 @localhost  (mysql-5.1.44 ndb-7.1.4)<br /><br />[mysqld(API)] 1 node(s)<br />id=50 (not connected, accepting connect from any host)<br /><br /><br />++ $HOME/sandboxes/mcluster/clear<br /><br />++ $HOME/sandboxes/mcluster/start<br />... sandbox server started<br />Please wait. Giving the cluster time to catch up<br />Connected to Management Server at: localhost:1186<br />Cluster Configuration<br />---------------------<br />[ndbd(NDB)] 2 node(s)<br />id=3 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0, Master)<br />id=4 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)<br /><br />[ndb_mgmd(MGM)] 1 node(s)<br />id=1 @localhost  (mysql-5.1.44 ndb-7.1.4)<br /><br />[mysqld(API)] 1 node(s)<br />id=50 (not connected, accepting connect from any host)<br /><br /><br />It may take up to 2 minutes to initialize ... ( 0 )<br />Connected to Management Server at: localhost:1186<br />Cluster Configuration<br />---------------------<br />[ndbd(NDB)] 2 node(s)<br />id=3 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0, Master)<br />id=4 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)<br /><br />[ndb_mgmd(MGM)] 1 node(s)<br />id=1 @localhost  (mysql-5.1.44 ndb-7.1.4)<br /><br />[mysqld(API)] 1 node(s)<br />id=50 (not connected, accepting connect from any host)<br /><br /><br />It may take up to 2 minutes to initialize ... ( 5 )<br />Connected to Management Server at: localhost:1186<br />Cluster Configuration<br />---------------------<br />[ndbd(NDB)] 2 node(s)<br />id=3 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0, Master)<br />id=4 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)<br /><br />[ndb_mgmd(MGM)] 1 node(s)<br />id=1 @localhost  (mysql-5.1.44 ndb-7.1.4)<br /><br />[mysqld(API)] 1 node(s)<br />id=50 (not connected, accepting connect from any host)<br /><br />[...]<br /><br />It may take up to 2 minutes to initialize ... ( 100 )<br />Connected to Management Server at: localhost:1186<br />Cluster Configuration<br />---------------------<br />[ndbd(NDB)] 2 node(s)<br />id=3 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)<br />id=4 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)<br /><br />[ndb_mgmd(MGM)] 1 node(s)<br />id=1 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4)<br /><br />[mysqld(API)] 1 node(s)<br />id=50 @127.0.0.1  (mysql-5.1.44 ndb-7.1.4)<br /><br /><br />++ $HOME/sandboxes/mcluster/use -vvv -e "create table test.t1(i int not null primary key)engine=ndb"<br />--------------<br />create table test.t1(i int not null primary key)engine=ndb<br />--------------<br />Query OK, 0 rows affected (0.45 sec)<br /><br />++ $HOME/sandboxes/mcluster/use -vvv -e "show create table test.t1\G"<br />--------------<br />show create table test.t1<br />--------------<br /><br />*************************** 1. row ***************************<br />       Table: t1<br />Create Table: CREATE TABLE `t1` (<br />  `i` int(11) NOT NULL,<br />  PRIMARY KEY (`i`)<br />) ENGINE=ndbcluster DEFAULT CHARSET=latin1<br />1 row in set (0.00 sec)<br /><br />to shut down the cluster, type:<br />$HOME/python/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndb_mgm -e shutdown<br /></code></pre>It works! Ans this is a good start to make me feel confident with Python, which I will use to develop MySQL Sandbox version 4. This cluster snippet will probably be made from scratch once the new architecture is in place. For now, it was enough to get the feeling of the language.<div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/16959946-8101332860596809352?l=datacharmer.blogspot.com" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=25142&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=25142&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://datacharmer.blogspot.com/2010/06/mysql-sandbox-embraces-python-and-meets.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mycheckpoint (rev. 132): custom monitoring, custom charts, process list dump</title>
		<link>http://code.openark.org/blog/mysql/mycheckpoint-rev-132-custom-monitoring-custom-charts-process-list-dump?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mycheckpoint-rev-132-custom-monitoring-custom-charts-process-list-dump</link>
		<comments>http://code.openark.org/blog/mysql/mycheckpoint-rev-132-custom-monitoring-custom-charts-process-list-dump#comments</comments>
		<pubDate>Fri, 04 Jun 2010 09:17:27 +0000</pubDate>
		<dc:creator>Shlomi Noach</dc:creator>
				<category><![CDATA[Graphs]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[mycheckpoint]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://code.openark.org/blog/?p=2463</guid>
		<description><![CDATA[Revision 132 of mycheckpoint has been released. New and updated in this revision:

Custom monitoring: monitoring &#38; charting for user defined queries
HTML reports for custom monitoring
Process list dump upon alert notifications

Custom monitoring &#38; charts
Custom monitoring allows the user to supply with a query, the results of which will be monitored.
That is, mycheckpoint monitors the status variables, replication status, OS metrics. But it cannot by itself monitor one&#8217;s application. Which is why a user may supply with such query as:

SELECT COUNT(*) FROM shopping_cart WHERE is_pending=1


Such a query will tell an online store how many customers are in the midst of shopping. There is no argument that this number is worth monitoring for. Given the above query, mycheckpoint will execute it per sample, and store the query&#8217;s result along with all sampled data, to be then aggregated by complex views to answer for:

What was the value per given sample?
What is the value difference for each sample?
What is the change per second, i.e. the rate?

mycheckpoint goes one step forward, and explicity records another metric:

How much time did it take to take that sample?

As another example, a query worth testing for rate:

SELECT MAX(shopping_cart_id) FROM shopping_cart


The above will provide with the last id. Assuming this is AUTO_INCREMENT, and assuming we&#8217;re on auto_increment_increment=1, two samples will allow us to get the number of created carts between those samples. Now, here&#8217;s a metric I&#8217;d like to read:

How many carts are created per second, for each hour of the day?

We get all these for free with mycheckpoint, which already does this analysis. All we need to provide is the query, and how we would like it to be visualized (visualization is optional, it is not the only way to diagnose monitored data) graphically:

INSERT INTO
 custom_query (custom_query_id, enabled, query_eval, description, chart_type, chart_order)
 VALUES (0, 1, 'SELECT COUNT(*) FROM store.shopping_cart WHERE is_pending=1', 'Number of pending carts', 'value', 0);

INSERT INTO
 custom_query (custom_query_id, enabled, query_eval, description, chart_type, chart_order)
 VALUES (1, 1, 'SELECT MAX(shopping_cart_id) FROM store.shopping_cart', 'Created carts rate', 'value_psec', 0);


We can later query for these values, just like we do for normal monitored values:

mysql&#62; SELECT id, ts, created_tmp_tables_psec, custom_0, custom_1_psec FROM sv_sample WHERE ts &#62;= NOW() - INTERVAL 1 HOUR;
+-------+---------------------+-------------------------+----------+---------------+
&#124; id    &#124; ts                  &#124; created_tmp_tables_psec &#124; custom_0 &#124; custom_1_psec &#124;
+-------+---------------------+-------------------------+----------+---------------+
&#124; 50730 &#124; 2010-05-21 19:05:01 &#124;                   16.64 &#124;      448 &#124;          3.02 &#124;
&#124; 50731 &#124; 2010-05-21 19:10:02 &#124;                   20.97 &#124;       89 &#124;          1.73 &#124;
&#124; 50732 &#124; 2010-05-21 19:15:01 &#124;                   15.70 &#124;      367 &#124;          3.56 &#124;
&#124; 50733 &#124; 2010-05-21 19:20:01 &#124;                   18.32 &#124;       54 &#124;          1.43 &#124;
&#124; 50734 &#124; 2010-05-21 19:25:01 &#124;                   16.42 &#124;       91 &#124;          1.96 &#124;
&#124; 50735 &#124; 2010-05-21 19:30:02 &#124;                   21.93 &#124;      233 &#124;          2.11 &#124;
&#124; 50736 &#124; 2010-05-21 19:35:02 &#124;                   14.58 &#124;      176 &#124;          1.91 &#124;
&#124; 50737 &#124; 2010-05-21 19:40:01 &#124;                   21.61 &#124;      168 &#124;          1.93 &#124;
&#124; 50738 &#124; 2010-05-21 19:45:01 &#124;                   16.05 &#124;      241 &#124;          2.44 &#124;
&#124; 50739 &#124; 2010-05-21 19:50:01 &#124;                   19.70 &#124;       46 &#124;          1.19 &#124;
&#124; 50740 &#124; 2010-05-21 19:55:01 &#124;                   15.85 &#124;      177 &#124;          2.28 &#124;
&#124; 50741 &#124; 2010-05-21 20:00:01 &#124;                   19.04 &#124;        8 &#124;          0.82 &#124;
+-------+---------------------+-------------------------+----------+---------------+


Of course, it is also possible to harness mycheckpoint&#8217;s views power to generate charts:

mysql&#62; SELECT custom_1_psec FROM sv_report_chart_sample\G



The rules are:

There can (currently) only be 18 custom queries.
The custom_query_id must range 0-17 (to be lifted soon).
A custom query must return with exactly one row, with exactly one column, which is a kind of integer.

Please read my earlier post on custom monitoring to get more background.
Custom monitoring HTML reports
Custom monitoring comes with a HTML reports, featuring requested charts. See a sample custom report.
In this sample report, a few queries are monitored for value (pending rentals, pending downloads) and a few for rates (downloads per second, emails per second etc.).
Custom HTML reports come in two flavors:

Brief reports, featuring last 24 hours, as in the example above. These are handled by the sv_custom_html_brief view.
Full reports, featuring last 24 hours, last 10 days, known history. These take longer to generate, and are handled by the sv_custom_html view.

The sample report was generated by issuing:

SELECT html FROM sv_custom_html_brief;

I won&#8217;t go into details here as for how this view generates the HTML code. There is a myriad of view dependencies, with many interesting tricks on the way. But do remember it&#8217;s just a view. You don&#8217;t need an application (not even mycheckpoint itself) to generate the report. All it takes is a query.
Processlist dump
When an alert notification fires (an email is prepared to inform on some alert condition), a processlist dump summary is taken and included in email report. It may be useful to understand why the slave is lagging, or exactly why there are so many active threads.
The dump summary presents the processlist much as you would see it on SHOW PROCESSLIST, but only lists the active threads, noting down how many sleeping processes there are (PS, thread &#38; process are the same in the terminology of MySQL connections). An example dump looks like this:

PROCESSLIST summary:

     Id: 3
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 3168098
  State: Waiting for master to send event
   Info: NULL
-------

     Id: 4
   User: system user
   Host:
     db: prod_db
Command: Connect
   Time: 612
  State: Updating
   Info: UPDATE user SET is_offline = 1 WHERE id IN (50440010,50440011)
-------

     Id: 8916579
   User: prod_user
   Host: localhost
     db: prod_db
Command: Query
   Time: 1
  State: Sending data
   Info: INSERT IGNORE INTO archive.stat_archive (id, origin, path, ts, content
-------

     Id: 8916629
   User: mycheckpoint
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: SHOW PROCESSLIST
-------
Sleeping: 3 processes


Future plans
Work is going on. These are the non-scheduled future tasks I see:

Monitoring InnoDB Plugin &#38; XtraDB status.
Interactive charts. See my earlier post.
Monitoring for swap activity (Linux only).
Enhanced custom queries handling, including auto-deploy upon change of custom queries.
A proper man page.
Anything else that interests me.

Try it out
Try out mycheckpoint. It’s a different kind of monitoring solution. You will need basic SQL skills, and in return you&#8217;ll get a lot of power under your hands.

Download mycheckpoint here
Visit the project’s homepage
Browse the documentation
Report bugs

mycheckpoint is released under the New BSD License.]]></description>
			<content:encoded><![CDATA[<p>Revision <strong>132</strong> of <a href="http://code.openark.org/forge/mycheckpoint">mycheckpoint</a> has been released. New and updated in this revision:</p>
<ul>
<li>Custom monitoring: monitoring &amp; charting for user defined queries</li>
<li>HTML reports for custom monitoring</li>
<li>Process list dump upon alert notifications</li>
</ul>
<h4>Custom monitoring &amp; charts</h4>
<p>Custom monitoring allows the user to supply with a query, the results of which will be monitored.</p>
<p>That is, <em>mycheckpoint</em> monitors the status variables, replication status, OS metrics. But it cannot by itself monitor one&#8217;s <em>application</em>. Which is why a user may supply with such query as:</p>
<blockquote><pre>
SELECT COUNT(*) FROM shopping_cart WHERE is_pending=1
</pre>
</blockquote>
<p>Such a query will tell an online store how many customers are in the midst of shopping. There is no argument that this number is worth monitoring for. Given the above query, <em>mycheckpoint</em> will execute it per sample, and store the query&#8217;s result along with all sampled data, to be then aggregated by complex views to answer for:</p>
<ul>
<li>What was the value per given sample?</li>
<li>What is the value difference for each sample?</li>
<li>What is the change per second, i.e. the rate?</li>
</ul>
<p>mycheckpoint goes one step forward, and explicity records another metric:</p>
<ul>
<li>How much time did it take to take that sample?</li>
</ul>
<p><span></span>As another example, a query worth testing for rate:</p>
<blockquote><pre>
SELECT MAX(shopping_cart_id) FROM shopping_cart
</pre>
</blockquote>
<p>The above will provide with the last id. Assuming this is <strong>AUTO_INCREMENT</strong>, and assuming we&#8217;re on <strong>auto_increment_increment=1</strong>, two samples will allow us to get the number of created carts between those samples. Now, here&#8217;s a metric I&#8217;d like to read:</p>
<ul>
<li>How many carts are created per second, for each hour of the day?</li>
</ul>
<p>We get all these for free with mycheckpoint, which already does this analysis. All we need to provide is the query, and how we would like it to be visualized (visualization is optional, it is not the only way to diagnose monitored data) graphically:</p>
<blockquote><pre>
INSERT INTO
 custom_query (custom_query_id, enabled, query_eval, description, chart_type, chart_order)
 VALUES (0, 1, 'SELECT COUNT(*) FROM store.shopping_cart WHERE is_pending=1', 'Number of pending carts', 'value', 0);

INSERT INTO
 custom_query (custom_query_id, enabled, query_eval, description, chart_type, chart_order)
 VALUES (1, 1, 'SELECT MAX(shopping_cart_id) FROM store.shopping_cart', 'Created carts rate', 'value_psec', 0);
</pre>
</blockquote>
<p>We can later query for these values, just like we do for normal monitored values:</p>
<blockquote><pre>
mysql&gt; SELECT id, ts, created_tmp_tables_psec, custom_0, custom_1_psec FROM sv_sample WHERE ts &gt;= NOW() - INTERVAL 1 HOUR;
+-------+---------------------+-------------------------+----------+---------------+
| id    | ts                  | created_tmp_tables_psec | custom_0 | custom_1_psec |
+-------+---------------------+-------------------------+----------+---------------+
| 50730 | 2010-05-21 19:05:01 |                   16.64 |      448 |          3.02 |
| 50731 | 2010-05-21 19:10:02 |                   20.97 |       89 |          1.73 |
| 50732 | 2010-05-21 19:15:01 |                   15.70 |      367 |          3.56 |
| 50733 | 2010-05-21 19:20:01 |                   18.32 |       54 |          1.43 |
| 50734 | 2010-05-21 19:25:01 |                   16.42 |       91 |          1.96 |
| 50735 | 2010-05-21 19:30:02 |                   21.93 |      233 |          2.11 |
| 50736 | 2010-05-21 19:35:02 |                   14.58 |      176 |          1.91 |
| 50737 | 2010-05-21 19:40:01 |                   21.61 |      168 |          1.93 |
| 50738 | 2010-05-21 19:45:01 |                   16.05 |      241 |          2.44 |
| 50739 | 2010-05-21 19:50:01 |                   19.70 |       46 |          1.19 |
| 50740 | 2010-05-21 19:55:01 |                   15.85 |      177 |          2.28 |
| 50741 | 2010-05-21 20:00:01 |                   19.04 |        8 |          0.82 |
+-------+---------------------+-------------------------+----------+---------------+
</pre>
</blockquote>
<p>Of course, it is also possible to harness <em>mycheckpoint</em>&#8217;s views power to generate charts:</p>
<blockquote>
<pre>mysql&gt; SELECT custom_1_psec FROM sv_report_chart_sample\G
<img class="alignnone" title="custom_1_psec" src="http://chart.apis.google.com/chart?cht=lc&amp;chs=400x200&amp;chts=303030,12&amp;chtt=Latest+24+hours:+May+19,+20:10++-++May+20,+20:10&amp;chf=c,s,ffffff&amp;chdl=custom_1_psec&amp;chdlp=b&amp;chco=ff8c00&amp;chd=s:QfXQmZQhXTmWVkWRobPpWUtQPVROaOOUMJPOKdJHQJFJEDJJEGCAIEFJHFFEGGDQHGJGMJPPMNZNRWR_ZUWfR_nSjuUcaXa3OgxRl4UivWZ5UhtWX4VgnUTYktiVW9WanUVxVYlgXwVdicXpb&amp;chxt=x,y&amp;chxr=1,0,5.120000&amp;chxl=0:%7C%7C+%7C%7C00:00%7C%7C+%7C%7C04:00%7C%7C+%7C%7C08:00%7C%7C+%7C%7C12:00%7C%7C+%7C%7C16:00%7C%7C+%7C%7C20:00%7C&amp;chxs=0,505050,10,0,lt&amp;chg=4.17,25,1,2,3.47,0&amp;chxp=0,3.47,7.64,11.81,15.98,20.15,24.32,28.49,32.66,36.83,41.00,45.17,49.34,53.51,57.68,61.85,66.02,70.19,74.36,78.53,82.70,86.87,91.04,95.21,99.38" alt="" width="400" height="200" />
</pre>
</blockquote>
<p>The rules are:</p>
<ul>
<li>There can (currently) only be 18 custom queries.</li>
<li>The <strong>custom_query_id</strong> must range 0-17 (to be lifted soon).</li>
<li>A custom query must return with <em>exactly</em> one row, with <em>exactly</em> one column, which is a kind of <em>integer</em>.</li>
</ul>
<p>Please read <a href="http://code.openark.org/blog/mysql/things-to-monitor-on-mysql-the-users-perspective">my earlier post</a> on custom monitoring to get more background.</p>
<h4>Custom monitoring HTML reports</h4>
<p>Custom monitoring comes with a HTML reports, featuring requested charts. See a <a href="http://code.openark.org/blog/wp-content/uploads/2010/05/mcp_custom_report-128.html">sample custom report</a>.</p>
<p>In this sample report, a few queries are monitored for value (pending rentals, pending downloads) and a few for rates (downloads per second, emails per second etc.).</p>
<p>Custom HTML reports come in two flavors:</p>
<ul>
<li>Brief reports, featuring last 24 hours, as in the example above. These are handled by the <strong>sv_custom_html_brief</strong> view.</li>
<li>Full reports, featuring last 24 hours, last 10 days, known history. These take longer to generate, and are handled by the <strong>sv_custom_html</strong> view.</li>
</ul>
<p>The sample report was generated by issuing:</p>
<blockquote>
<pre>SELECT html FROM sv_custom_html_brief;</pre>
</blockquote>
<p>I won&#8217;t go into details here as for how this view generates the HTML code. There is a myriad of view dependencies, with many interesting tricks on the way. But do remember it&#8217;s <em>just a view</em>. You don&#8217;t need an application (not even <em>mycheckpoint</em> itself) to generate the report. All it takes is a query.</p>
<h4>Processlist dump</h4>
<p>When an alert notification fires (an email is prepared to inform on some alert condition), a processlist dump summary is taken and included in email report. It may be useful to understand why the slave is lagging, or exactly why there are so many active threads.</p>
<p>The dump summary presents the processlist much as you would see it on SHOW PROCESSLIST, but only lists the active threads, noting down how many sleeping processes there are (PS, thread &amp; process are the same in the terminology of MySQL connections). An example dump looks like this:</p>
<blockquote>
<pre>PROCESSLIST summary:

     Id: 3
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 3168098
  State: Waiting for master to send event
   Info: NULL
-------

     Id: 4
   User: system user
   Host:
     db: prod_db
Command: Connect
   Time: 612
  State: Updating
   Info: UPDATE user SET is_offline = 1 WHERE id IN (50440010,50440011)
-------

     Id: 8916579
   User: prod_user
   Host: localhost
     db: prod_db
Command: Query
   Time: 1
  State: Sending data
   Info: INSERT IGNORE INTO archive.stat_archive (id, origin, path, ts, content
-------

     Id: 8916629
   User: mycheckpoint
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: SHOW PROCESSLIST
-------
Sleeping: 3 processes
</pre>
</blockquote>
<h4>Future plans</h4>
<p>Work is going on. These are the non-scheduled future tasks I see:</p>
<ul>
<li>Monitoring InnoDB Plugin &amp; XtraDB status.</li>
<li>Interactive charts. See my <a href="http://code.openark.org/blog/mysql/static-charts-vs-interactive-charts">earlier post</a>.</li>
<li>Monitoring for swap activity (Linux only).</li>
<li>Enhanced custom queries handling, including auto-deploy upon change of custom queries.</li>
<li>A proper <em>man</em> page.</li>
<li>Anything else that interests me.</li>
</ul>
<h4>Try it out</h4>
<p>Try out <em>mycheckpoint</em>. It’s a different kind of monitoring solution. You will need basic SQL skills, and in return you&#8217;ll get a lot of power under your hands.</p>
<ul>
<li>Download mycheckpoint <a href="https://code.google.com/p/mycheckpoint/">here</a></li>
<li>Visit the project’s <a href="http://code.openark.org/forge/mycheckpoint">homepage</a></li>
<li>Browse the <a href="http://code.openark.org/forge/mycheckpoint/documentation">documentation</a></li>
<li>Report <a href="https://code.google.com/p/mycheckpoint/issues/list">bugs</a></li>
</ul>
<p><em>mycheckpoint</em> is released under the <a href="http://www.opensource.org/licenses/bsd-license.php">New BSD License</a>.</p><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24947&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24947&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://code.openark.org/blog/mysql/mycheckpoint-rev-132-custom-monitoring-custom-charts-process-list-dump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Connector/Python 0.1.5 release: critical bug fix</title>
		<link>http://geert.vanderkelen.org/2010/05/mysql-connectorpython-015-release.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mysql-connectorpython-0-1-5-release-critical-bug-fix</link>
		<comments>http://geert.vanderkelen.org/2010/05/mysql-connectorpython-015-release.html#comments</comments>
		<pubDate>Thu, 27 May 2010 09:50:24 +0000</pubDate>
		<dc:creator>Geert Vanderkelen</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[myconnpy]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-7603704315097619422.post-5572935448913790756</guid>
		<description><![CDATA[We just released MySQL Connector/Python 0.1.5 which includes a critical bug fix. It was impossible to read big result sets. The files for 0.1.4-release have been removed.You can download MySQL Connector/Python from Launchpad.Highlights:It was impossible to retrieve big result sets. (bug lp:551533 and lp:586003)
Changing copyright from Sun to Oracle (also fixing silly typo)
A very Big Thanks goes to the reporters of bug lp:551533 and lp:586003. Apologies for not being able to reproduce the bug earlier, before releasing 0.1.4.About MySQL Connector/Python: MySQL Connector/Python is implementing the MySQL Client/Server protocol completely in Python. No MySQL libraries are needed, and no compilation is necessary to run this Python DB API v2.0 compliant driver. It is compatible with Python v2.5 and later as well as Python v3.1 and later.]]></description>
			<content:encoded><![CDATA[<p>We just released <b><a href="http://launchpad.net/myconnpy">MySQL Connector/Python 0.1.5</a></b> which includes a critical bug fix. It was impossible to read big result sets. The files for 0.1.4-release have been removed.</p><p>You can <b>download MySQL Connector/Python</b> from <a href="https://launchpad.net/myconnpy/+download">Launchpad</a>.</p><p>Highlights:</p><ul><li>It was impossible to retrieve big result sets. (bug lp:551533 and lp:586003)</li>
<li>Changing copyright from Sun to Oracle (also fixing silly typo)</li>
</ul><p>A very <b>Big Thanks</b> goes to the reporters of bug <a href="https://bugs.launchpad.net/myconnpy/+bug/551533">lp:551533</a> and <a href="https://bugs.launchpad.net/bugs/586003">lp:586003</a>. Apologies for not being able to reproduce the bug earlier, before releasing 0.1.4.</p><p><b>About MySQL Connector/Python:</b> <i>MySQL Connector/Python is implementing the MySQL Client/Server protocol completely in Python. No MySQL libraries are needed, and no compilation is necessary to run this Python DB API v2.0 compliant driver. It is compatible with Python v2.5 and later as well as Python v3.1 and later.</i></p><div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/7603704315097619422-5572935448913790756?l=geert.vanderkelen.org" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24879&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24879&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://geert.vanderkelen.org/2010/05/mysql-connectorpython-015-release.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Connector/Python 0.1.4-devel available</title>
		<link>http://geert.vanderkelen.org/2010/05/mysql-connectorpython-014-devel.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mysql-connectorpython-0-1-4-devel-available</link>
		<comments>http://geert.vanderkelen.org/2010/05/mysql-connectorpython-014-devel.html#comments</comments>
		<pubDate>Fri, 21 May 2010 08:07:24 +0000</pubDate>
		<dc:creator>Geert Vanderkelen</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[myconnpy]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">tag:blogger.com,1999:blog-7603704315097619422.post-8407378719963557049</guid>
		<description><![CDATA[Next development release 0.1.4 of MySQL Connector/Python is now available for download. This will be the last in the 0.1-series as we move on to 0.2. The aim is to release more often to get to v1.0. Hurray!Highlights:Reading from network was broken for bigger packages.
Reimplementing protocol.MySQLProtocol marking simpler and easier to maintain.
It is now possible to send multiple statements to MySQL using MySQLCursor.execute(). The results are accessible by calling the method next_resultset().
MySQLCursor.callproc() will now store all result sets as a MySQLCursorBuffered. They are accessible using the next_proc_resultset() method. The result of the stored procedure is returned by callproc() itself as defined by PEP249.
MySQL DATETIME conversion to Python datetime.datetime is now much faster.
Some overall performance improvements.
Copyright notice changes.
Big thanks to everyone using and reporting bugs found in MySQL Connector/Python. Don't hesitate to ask questions and report problems or feature requests using Launchpad.
About MySQL Connector/Python: MySQL Connector/Python is implementing the MySQL Client/Server protocol completely in Python. No MySQL libraries are needed, and no compilation is necessary to run this Python DB API v2.0 compliant driver. It is compatible with Python v2.5 and later as well as Python v3.1 and later.]]></description>
			<content:encoded><![CDATA[<p><b>Next development release 0.1.4 of <a href="http://launchpad.net/myconnpy/">MySQL Connector/Python</a></b> is now available for <a href="https://launchpad.net/myconnpy/+download">download</a>. This will be the last in the 0.1-series as we move on to 0.2. The aim is to release more often to get to v1.0. Hurray!</p><p><b>Highlights</b>:</p><ul><li>Reading from network was broken for bigger packages.</li>
<li>Reimplementing protocol.MySQLProtocol marking simpler and easier to maintain.</li>
<li>It is now possible to send multiple statements to MySQL using MySQLCursor.execute(). The results are accessible by calling the method next_resultset().</li>
<li>MySQLCursor.callproc() will now store all result sets as a MySQLCursorBuffered. They are accessible using the next_proc_resultset() method. The result of the stored procedure is returned by callproc() itself as defined by PEP249.</li>
<li>MySQL DATETIME conversion to Python datetime.datetime is now much faster.</li>
<li>Some overall performance improvements.</li>
<li>Copyright notice changes.</li>
</ul><p><b>Big thanks</b> to everyone using and reporting bugs found in MySQL Connector/Python. Don't hesitate to <a href="https://answers.launchpad.net/myconnpy">ask questions</a> and <a href="https://bugs.launchpad.net/myconnpy">report problems or feature requests</a> using Launchpad.<br />
<p><b>About MySQL Connector/Python</b>: <i>MySQL Connector/Python is implementing the MySQL Client/Server protocol completely in Python. No MySQL libraries are needed, and no compilation is necessary to run this Python DB API v2.0 compliant driver. It is compatible with Python v2.5 and later as well as Python v3.1 and later.</i></p><div><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/7603704315097619422-8407378719963557049?l=geert.vanderkelen.org" alt="" /></div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24831&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24831&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://geert.vanderkelen.org/2010/05/mysql-connectorpython-014-devel.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kontrollkit &#8211; new version available for download</title>
		<link>http://feedproxy.google.com/~r/Kontrollsoft/~3/ZoCBMa7uu_Q/756?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=kontrollkit-new-version-available-for-download</link>
		<comments>http://feedproxy.google.com/~r/Kontrollsoft/~3/ZoCBMa7uu_Q/756#comments</comments>
		<pubDate>Mon, 26 Apr 2010 20:24:55 +0000</pubDate>
		<dc:creator>Matt Reid</dc:creator>
				<category><![CDATA[Backups]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql server]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[relational]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://kontrollsoft.com/?p=756</guid>
		<description><![CDATA[Just a quick notice to let everyone know that there is a new version of Kontrollkit available. There are some required bug fixes to the formerly new python backup script and some Solaris compatible changes to the various my.cnf files. You can download the new version here: http://kontrollsoft.com/software-downloads, or here: http://code.google.com/p/kontrollkit/
]]></description>
			<content:encoded><![CDATA[Just a quick notice to let everyone know that there is a new version of Kontrollkit available. There are some required bug fixes to the formerly new python backup script and some Solaris compatible changes to the various my.cnf files. You can download the new version here: http://kontrollsoft.com/software-downloads, or here: http://code.google.com/p/kontrollkit/
<img src="http://feeds.feedburner.com/~r/Kontrollsoft/~4/ZoCBMa7uu_Q" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24522&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24522&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://feedproxy.google.com/~r/Kontrollsoft/~3/ZoCBMa7uu_Q/756/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kontrollkit &#8211; new version available for download</title>
		<link>http://feedproxy.google.com/~r/Kontrollsoft/~3/ZoCBMa7uu_Q/756?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=kontrollkit-new-version-available-for-download</link>
		<comments>http://feedproxy.google.com/~r/Kontrollsoft/~3/ZoCBMa7uu_Q/756#comments</comments>
		<pubDate>Mon, 26 Apr 2010 20:24:55 +0000</pubDate>
		<dc:creator>Matt Reid</dc:creator>
				<category><![CDATA[Backups]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql server]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[relational]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://kontrollsoft.com/?p=756</guid>
		<description><![CDATA[Just a quick notice to let everyone know that there is a new version of Kontrollkit available. There are some required bug fixes to the formerly new python backup script and some Solaris compatible changes to the various my.cnf files. You can download the new version here: http://kontrollsoft.com/software-downloads, or here: http://code.google.com/p/kontrollkit/
]]></description>
			<content:encoded><![CDATA[Just a quick notice to let everyone know that there is a new version of Kontrollkit available. There are some required bug fixes to the formerly new python backup script and some Solaris compatible changes to the various my.cnf files. You can download the new version here: http://kontrollsoft.com/software-downloads, or here: http://code.google.com/p/kontrollkit/
<img src="http://feeds.feedburner.com/~r/Kontrollsoft/~4/ZoCBMa7uu_Q" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24522&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24522&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://feedproxy.google.com/~r/Kontrollsoft/~3/ZoCBMa7uu_Q/756/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reviewed: Python Testing by Daniel Arbuckle</title>
		<link>http://feedproxy.google.com/~r/Themattreid/~3/n-StmQnbCBQ/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=reviewed-python-testing-by-daniel-arbuckle</link>
		<comments>http://feedproxy.google.com/~r/Themattreid/~3/n-StmQnbCBQ/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 17:49:02 +0000</pubDate>
		<dc:creator>Matt Reid</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql server]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://themattreid.com/wordpress/?p=303</guid>
		<description><![CDATA[I&#8217;ve recently had the pleasure of reading &#8220;Python Testing: An easy and convenient approach to testing your python projects&#8221; from Packt Publishing. It&#8217;s been a quick read but a solid set of instructions on the different methods for the subject. 
The book starts out very quickly with details about the various methods that are available, the means of automation for testing, and of course the environment you&#8217;d want to be in for working on the subjects that the book covers. It then, in the second chapter, moves into the guts of testing by describing the basics of doctest via syntax and some simple examples, and then moves on to a real world example via the AVL tree. It&#8217;s all very basic testing until chapter three where the author gets into unit testing, which is probably the most useful method in my opinion, and he goes to prove it&#8217;s usefulness with examples of it&#8217;s use in different parts and stages of the development process. Later in the book the python mocker is used to separate unit sections, and then the actual unittest framework is discussed with more examples and a enough details that if you don&#8217;t understand it by then, you may never. By chapter six we are into the Nose app that drives the unittest, which is very useful of course. 
The most useful part of the book comes toward the end where the author discusses and the walks through the method used to create a test-driven application and then even shows examples via the whole chapter dedicated towards making a testable web application frontend. Very impressive for such a quick read. Integration testing and System testing is also covered, thankfully. The final chapter covers some useful tools and techniques of which I particularly enjoyed the section on version control hooks. If you are not using version control in your development process you need to start now, as such the hooks for integration with the test framework are rather useful to know. 
Overall this is a very nice book that discusses python application testing from the ground up. It&#8217;s perfect for a beginner or an intermediate python programmer that has little to no experience in automated testing methods. More advanced programmers that have already used these methods will probably not find the book too useful except for the last chapter that covers extra tools and techniques that they might not have seen before. If I didn&#8217;t have this book and needed to learn about python testing, it would be my first choice and my only recommendation so far. Well written and very useful.  
If there is one thing I do not like about the book, it would be the reliance on the python CLI for running commands. I am a CLI kind of person and I keep lots of terminals open at the same time, so I prefer to write my code in an editor or IDE in one term tab, then switch to another and execute the script; I do not use the python command line to do much of anything. So following some of the steps in the book require that you follow the CLI method and that gets old for me. It&#8217;s a personal preference but one worth noting as there is a lot of it in the book.  That&#8217;s the only thing I did not enjoy in a book that was otherwise basically perfect for the subject. 
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently had the pleasure of reading <a href="http://www.packtpub.com/python-testing-beginners-guide/book?utm_source=themattreid.com&amp;utm_medium=link&amp;utm_content=blog&amp;utm_campaign=mdb_002348">&#8220;Python Testing: An easy and convenient approach to testing your python projects&#8221;</a> from Packt Publishing. It&#8217;s been a quick read but a solid set of instructions on the different methods for the subject. </p>
<p>The book starts out very quickly with details about the various methods that are available, the means of automation for testing, and of course the environment you&#8217;d want to be in for working on the subjects that the book covers. It then, in the second chapter, moves into the guts of testing by describing the basics of doctest via syntax and some simple examples, and then moves on to a real world example via the AVL tree. It&#8217;s all very basic testing until chapter three where the author gets into unit testing, which is probably the most useful method in my opinion, and he goes to prove it&#8217;s usefulness with examples of it&#8217;s use in different parts and stages of the development process. Later in the book the python mocker is used to separate unit sections, and then the actual unittest framework is discussed with more examples and a enough details that if you don&#8217;t understand it by then, you may never. By chapter six we are into the Nose app that drives the unittest, which is very useful of course. </p>
<p>The most useful part of the book comes toward the end where the author discusses and the walks through the method used to create a test-driven application and then even shows examples via the whole chapter dedicated towards making a testable web application frontend. Very impressive for such a quick read. Integration testing and System testing is also covered, thankfully. The final chapter covers some useful tools and techniques of which I particularly enjoyed the section on version control hooks. If you are not using version control in your development process you need to start now, as such the hooks for integration with the test framework are rather useful to know. </p>
<p>Overall this is a very nice book that discusses python application testing from the ground up. It&#8217;s perfect for a beginner or an intermediate python programmer that has little to no experience in automated testing methods. More advanced programmers that have already used these methods will probably not find the book too useful except for the last chapter that covers extra tools and techniques that they might not have seen before. If I didn&#8217;t have this book and needed to learn about python testing, it would be my first choice and my only recommendation so far. Well written and very useful.  </p>
<p>If there is one thing I do not like about the book, it would be the reliance on the python CLI for running commands. I am a CLI kind of person and I keep lots of terminals open at the same time, so I prefer to write my code in an editor or IDE in one term tab, then switch to another and execute the script; I do not use the python command line to do much of anything. So following some of the steps in the book require that you follow the CLI method and that gets old for me. It&#8217;s a personal preference but one worth noting as there is a lot of it in the book.  That&#8217;s the only thing I did not enjoy in a book that was otherwise basically perfect for the subject. </p>
<img src="http://feeds.feedburner.com/~r/Themattreid/~4/n-StmQnbCBQ" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24441&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24441&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://feedproxy.google.com/~r/Themattreid/~3/n-StmQnbCBQ/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kontrollkit &#8211; new backup script is partition space aware</title>
		<link>http://feedproxy.google.com/~r/Kontrollsoft/~3/JClfkAQQuFI/748?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=kontrollkit-new-backup-script-is-partition-space-aware</link>
		<comments>http://feedproxy.google.com/~r/Kontrollsoft/~3/JClfkAQQuFI/748#comments</comments>
		<pubDate>Tue, 30 Mar 2010 20:55:43 +0000</pubDate>
		<dc:creator>Matt Reid</dc:creator>
				<category><![CDATA[Backups]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[kontrollbase]]></category>
		<category><![CDATA[kontrollkit]]></category>
		<category><![CDATA[kontrollsoft]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql server]]></category>
		<category><![CDATA[partition]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[relational]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://kontrollsoft.com/?p=748</guid>
		<description><![CDATA[I&#8217;ve been wanting to write a backup script for a while now that does the following: reads the partition information for the directory that you are backing up into and computes the used/available/percentage-available space. Then it reads the total data size from the MySQL tables and ensures that you have enough space on disk (for [...]]]></description>
			<content:encoded><![CDATA[I&#8217;ve been wanting to write a backup script for a while now that does the following: reads the partition information for the directory that you are backing up into and computes the used/available/percentage-available space. Then it reads the total data size from the MySQL tables and ensures that you have enough space on disk (for [...]<img src="http://feeds.feedburner.com/~r/Kontrollsoft/~4/JClfkAQQuFI" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24134&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24134&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://feedproxy.google.com/~r/Kontrollsoft/~3/JClfkAQQuFI/748/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mycheckpoint (Rev. 118): alerts, email notifications and more</title>
		<link>http://code.openark.org/blog/mysql/mycheckpoint-rev-118-alerts-email-notifications-and-more?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mycheckpoint-rev-118-alerts-email-notifications-and-more</link>
		<comments>http://code.openark.org/blog/mysql/mycheckpoint-rev-118-alerts-email-notifications-and-more#comments</comments>
		<pubDate>Thu, 25 Mar 2010 06:26:34 +0000</pubDate>
		<dc:creator>Shlomi Noach</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[mycheckpoint]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://code.openark.org/blog/?p=2221</guid>
		<description><![CDATA[Revision 118 of mycheckpoint has been released. New and updated in this revision:

Conditional alerts
Email notifications
Revised HTML reports, including 24/7 reports.
Updated documentation

With this new revision mycheckpoint turns into a monitoring solution for MySQL. One can now:

Store measure metrics
Query for raw, aggregated or digested metrics
Generate charts for selected metrics
View HTML reports for selecetd metrics
Define alerts conditions, query for pending alerts
Be notified via email on raised or resolved alerts.

Conditional alerts
mycheckpoint is SQL oriented. As such, it allows for creation of alert conditions, which are nothing more than SQL conditions.
For example, we wish to raise an alerts when the slave stops replicating (just ping us with an email one this happens):
INSERT INTO alert_condition (condition_eval, description, alert_delay_minutes)
  VALUES ('seconds_behind_master IS NULL', 'Slave not replicating', 0);

Or is too far behind (but since we do maintenance work during the night, it&#8217;s OK on those hours). We only want to be notified if this goes on for 10 minutes:
INSERT INTO alert_condition (condition_eval, description, alert_delay_minutes)
  VALUES ('(seconds_behind_master &#62; 60) AND (HOUR(ts) NOT BETWEEN 2 AND 4)', 'Slave lags too far behind', 10);

We want to be notified when the datadir mount point disk quota exceeds 95% usage. Oh, and please keep nagging us about this, as long as it is unresolved:
INSERT INTO alert_condition (condition_eval, description, repetitive_alert)
  VALUES ('os_datadir_mountpoint_usage_percent &#62; 95', 'datadir mount point is over 95%', 1);

There&#8217;s much more to alert conditions. You can generate a pending alerts report, get a textual presentation of raised and pending alerts, view the query which determines what alerts are currently raised, and more.
Read more on the alerts documentation page.
Email notifications
Introducing email notifications, mycheckpoint now:

Sends email notification on alert conditions meeting. See sample email screenshot.
Sends email notification when it is unable to access the database.
Sends report via mail. Currently only HTML brief report is supported. Report is attached as HTML file in email message.

Alert notifications are automatically sent by mail (once SMTP configuration is in place, see following) when an alert is raised (alert condition becomes true) or resolved (alert condition turns false).
Email notifications require simple configuration for SMTP host, SMTP-from-address, SMTP-to-address. These can be made in the defaults file (revised), or through the command line. The following example shows how one can manually send an HTML brief report:

mycheckpoint --defaults-file=/etc/mycheckpoint.cnf --smtp-from=monitor@my-server-company.com --smtp-to=dba@my-server-company.com --smtp-host=mail.my-server-company.com email_brief_report

One should generally set up these parameters in the configuration file (aka defaults file) and forget all about it. mycheckpoint now has a default for the defaults file, which is /etc/mycheckpoint.cnf.
Read more on the emails documentation page.
Revised HTML reports

The brief HTML reports has been updated, see sample.
An HTML 24/7 report as been added, see sample. This report shows the distribution of popular metrics throughout the weekdays and hours.

Full HTML reports remain slow to load. I&#8217;m putting some work into this, but I&#8217;m not sure I can work around the optimizer&#8217;s limitations of using indexes for GROUPing through views.
Updated documentation
The documentation has been revised, with more details put into the pages. Since mycheckpoint gains more and more features, I saw fit to write a Quick HOWTO page which gets you up to speed, no fuss around, with mycheckpoint&#8217;s usage and features.
Read the mycheckpoint Quick HOWTO here.
Future plans
Work is going on. These are the non-scheduled future tasks I see:

Custom monitoring + notifications. See my earlier post.
Monitoring InnoDB Plugin &#38; XtraDB status.
PROCESSLIST dump on alerts.
Interactive charts. See my earlier post.
A proper man page&#8230;

Try it out
Try out mycheckpoint. It&#8217;s a different kind of monitoring solution. It does not require to to have a web server or complicated dependencies. To the experienced DBA it can further provide with valuable, raw or digested information in the form of SQL accessible data. I have used it to find anomalies in passing months, doing SQL search for periods of time where several conditions applied &#8212; it really gives you some extra power.

Download mycheckpoint here
Visit the project&#8217;s homepage
Browse the documentation
Report bugs

mycheckpoint is released under the New BSD License.
http://code.openark.org/forge/mycheckpoint/documentation/quick-howto]]></description>
			<content:encoded><![CDATA[<p>Revision <strong>118</strong> of <a href="http://code.openark.org/forge/mycheckpoint">mycheckpoint</a> has been released. New and updated in this revision:</p>
<ul>
<li>Conditional alerts</li>
<li>Email notifications</li>
<li>Revised HTML reports, including 24/7 reports.</li>
<li>Updated documentation</li>
</ul>
<p>With this new revision mycheckpoint turns into a <em>monitoring solution</em> for MySQL. One can now:</p>
<ul>
<li>Store measure metrics</li>
<li>Query for raw, aggregated or digested metrics</li>
<li>Generate charts for selected metrics</li>
<li>View HTML reports for selecetd metrics</li>
<li>Define alerts conditions, query for pending alerts</li>
<li>Be notified via <em>email</em> on <em>raised</em> or <em>resolved</em> alerts.</li>
</ul>
<h4>Conditional alerts</h4>
<p><em>mycheckpoint</em> is <em>SQL oriented</em>. As such, it allows for creation of alert conditions, which are nothing more than SQL conditions.</p>
<p><span></span>For example, we wish to raise an alerts when the slave stops replicating (just ping us with an email one this happens):</p>
<blockquote><pre>INSERT INTO alert_condition (condition_eval, description, alert_delay_minutes)
  VALUES ('seconds_behind_master IS NULL', 'Slave not replicating', 0);</pre>
</blockquote>
<p>Or is too far behind (but since we do maintenance work during the night, it&#8217;s OK on those hours). We only want to be notified if this goes on for <strong>10</strong> minutes:</p>
<blockquote><pre>INSERT INTO alert_condition (condition_eval, description, alert_delay_minutes)
  VALUES ('(seconds_behind_master &gt; 60) AND (HOUR(ts) NOT BETWEEN 2 AND 4)', 'Slave lags too far behind', 10);</pre>
</blockquote>
<p>We want to be notified when the <strong>datadir</strong> mount point disk quota exceeds 95% usage. Oh, and please keep nagging us about this, as long as it is unresolved:</p>
<blockquote><pre>INSERT INTO alert_condition (condition_eval, description, repetitive_alert)
  VALUES ('os_datadir_mountpoint_usage_percent &gt; 95', 'datadir mount point is over 95%', 1);</pre>
</blockquote>
<p>There&#8217;s much more to alert conditions. You can generate a pending alerts report, get a textual presentation of raised and pending alerts, view the query which determines what alerts are currently raised, and more.</p>
<p>Read more on the <a href="http://code.openark.org/forge/mycheckpoint/documentation/alerts">alerts documentation page</a>.</p>
<h4>Email notifications</h4>
<p>Introducing email notifications, <em>mycheckpoint</em> now:</p>
<ul>
<li>Sends email notification on alert conditions meeting. See <a href="http://code.openark.org/forge/wp-content/uploads/2010/03/mycheckpoint-alerts-email-sample-113.jpeg">sample email screenshot</a>.</li>
<li>Sends email notification when it is unable to access the database.</li>
<li>Sends report via mail. Currently only HTML brief report is supported. Report is attached as HTML file in email message.</li>
</ul>
<p>Alert notifications are automatically sent by mail (once SMTP configuration is in place, see following) when an alert is <em>raised</em> (alert condition becomes <strong>true</strong>) or <em>resolved</em> (alert condition turns <strong>false</strong>).</p>
<p>Email notifications require simple configuration for SMTP host, SMTP-from-address, SMTP-to-address. These can be made in the <a href="http://code.openark.org/forge/mycheckpoint/documentation/usage#defaults_file">defaults file</a> (revised), or through the command line. The following example shows how one can manually send an HTML brief report:</p>
<blockquote>
<pre>mycheckpoint --defaults-file=/etc/mycheckpoint.cnf <strong>--smtp-from</strong>=monitor@my-server-company.com <strong>--smtp-to</strong>=dba@my-server-company.com <strong>--smtp-host</strong>=mail.my-server-company.com <strong>email_brief_report</strong></pre>
</blockquote>
<p>One should generally set up these parameters in the configuration file (aka <em>defaults file</em>) and forget all about it. mycheckpoint now has a default for the defaults file, which is <strong>/etc/mycheckpoint.cnf</strong>.</p>
<p>Read more on the <a href="http://code.openark.org/forge/mycheckpoint/documentation/emails">emails documentation page</a>.</p>
<h4>Revised HTML reports</h4>
<ul>
<li>The brief HTML reports has been updated, see <a href="http://code.openark.org/forge/wp-content/uploads/2010/03/mycheckpoint-brief-report-sample-113.html">sample</a>.</li>
<li>An HTML 24/7 report as been added, see <a href="http://code.openark.org/forge/wp-content/uploads/2010/03/mycheckpoint-24-7-report-sample-107.html">sample</a>. This report shows the distribution of popular metrics throughout the weekdays and hours.</li>
</ul>
<p>Full HTML reports remain slow to load. I&#8217;m putting some work into this, but I&#8217;m not sure I can work around the optimizer&#8217;s limitations of using indexes for GROUPing through views.</p>
<h4>Updated documentation</h4>
<p>The documentation has been revised, with more details put into the pages. Since <em>mycheckpoint</em> gains more and more features, I saw fit to write a <a href="http://code.openark.org/forge/mycheckpoint/documentation/quick-howto">Quick HOWTO</a> page which gets you up to speed, no fuss around, with <em>mycheckpoint</em>&#8217;s usage and features.</p>
<p>Read the mycheckpoint <a href="http://code.openark.org/forge/mycheckpoint/documentation/quick-howto">Quick HOWTO</a> here.</p>
<h4>Future plans</h4>
<p>Work is going on. These are the non-scheduled future tasks I see:</p>
<ul>
<li>Custom monitoring + notifications. See my <a href="http://code.openark.org/blog/mysql/things-to-monitor-on-mysql-the-users-perspective">earlier post</a>.</li>
<li>Monitoring InnoDB Plugin &amp; XtraDB status.</li>
<li>PROCESSLIST dump on alerts.</li>
<li>Interactive charts. See my <a href="http://code.openark.org/blog/mysql/static-charts-vs-interactive-charts">earlier post</a>.</li>
<li>A proper <em>man</em> page&#8230;</li>
</ul>
<h4>Try it out</h4>
<p>Try out <em>mycheckpoint</em>. It&#8217;s a different kind of monitoring solution. It does not require to to have a web server or complicated dependencies. To the experienced DBA it can further provide with valuable, raw or digested information in the form of SQL accessible data. I have used it to find anomalies in passing months, doing SQL search for periods of time where several conditions applied &#8212; it really gives you some extra power.</p>
<ul>
<li>Download mycheckpoint <a href="https://code.google.com/p/mycheckpoint/">here</a></li>
<li>Visit the project&#8217;s <a href="http://code.openark.org/forge/mycheckpoint">homepage</a></li>
<li>Browse the <a href="http://code.openark.org/forge/mycheckpoint/documentation">documentation</a></li>
<li>Report <a href="https://code.google.com/p/mycheckpoint/issues/list">bugs</a></li>
</ul>
<p><em>mycheckpoint</em> is released under the <a href="http://www.opensource.org/licenses/bsd-license.php">New BSD License</a>.</p>
<div>http://code.openark.org/forge/mycheckpoint/documentation/quick-howto</div><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24026&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=24026&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://code.openark.org/blog/mysql/mycheckpoint-rev-118-alerts-email-notifications-and-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kontrollcomm &#8211; remote database and system command execution webapp</title>
		<link>http://feedproxy.google.com/~r/Kontrollsoft/~3/PPjHa-9L0m4/725?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=kontrollcomm-remote-database-and-system-command-execution-webapp</link>
		<comments>http://feedproxy.google.com/~r/Kontrollsoft/~3/PPjHa-9L0m4/725#comments</comments>
		<pubDate>Mon, 22 Mar 2010 05:28:26 +0000</pubDate>
		<dc:creator>Matt Reid</dc:creator>
				<category><![CDATA[BSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[command execution]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[kontrollbase]]></category>
		<category><![CDATA[kontrollcomm]]></category>
		<category><![CDATA[kontrollsoft]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql server]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[resin]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://kontrollsoft.com/?p=725</guid>
		<description><![CDATA[I&#8217;m pleased to announce the first release of Kontrollcomm &#8211; “The Server Command Automation Interface” is a web-based application that automates remote command execution on linux and unix based servers. There are three main areas of the application: Hosts, Templates, and Commands. The use is very simple: all of your hosts are setup in the [...]]]></description>
			<content:encoded><![CDATA[I&#8217;m pleased to announce the first release of Kontrollcomm &#8211; “The Server Command Automation Interface” is a web-based application that automates remote command execution on linux and unix based servers. There are three main areas of the application: Hosts, Templates, and Commands. The use is very simple: all of your hosts are setup in the [...]<img src="http://feeds.feedburner.com/~r/Kontrollsoft/~4/PPjHa-9L0m4" height="1" width="1" /><br/>PlanetMySQL Voting:
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23974&vote=1&apivote=1">Vote UP</a> /
	 <a href="http://planet.mysql.com/entry/vote/?entry_id=23974&vote=-1&apivote=1">Vote DOWN</a>]]></content:encoded>
			<wfw:commentRss>http://feedproxy.google.com/~r/Kontrollsoft/~3/PPjHa-9L0m4/725/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
