o DONE
  Make screenshots about CLI.

o DONE
  Change config with rewriting the value
  SET GLOBAL variable_name=value;

  set global port =2222;
  ERROR 1238 (HY000): Variable 'port' is a read only variable

o DONE
  Get config file(s).
  
o Upload config file.

o DONE
  Node stop start restart.

o DONE
  Filtering with job-id
  s9s job --list --job-id=6

o DONE
  s9s job --log --job-id=6 --long
  This should not have JOB_SUCCESS, JOB_WARNING, JOB_FAILED, but 
  MESSAGE, WARNING, ERROR
  Not Status but severity.

o DONE
  Filtering the cluster list with --cluster-name and --cluster-id

o This should tell what are the possible command line options.
  s9s job --job-id=5 
  Unknown job operation.

o NOPE, this is already used, the --cmon-user actually will be used in the
  authenticating.
  Should be able to filter like this:
  s9s user --list --cmon-user=pipas

o DONE
  send password when creating a cluster (root user password).
 /job_data/postgre_password

o 
  Jobs don't have "host" part when created from the command line tool.

o DONE 
  Jobs don't have group in the detailed list (only in the brief).
--------------------------------------------------------------------------------
Setup PostgreSQL Server
Job finished.                                                                  
                                                                              
Created   : 2017-02-06 11:07:16    ID   : 1          Status : FINISHED 
Started   : 2017-02-06 11:07:18    User : pipas      Host   :  
Ended     : 2017-02-06 11:11:59
--------------------------------------------------------------------------------


o 
  remove job

o DONE
  s9s node --stat

o s9s cluster —add-node —nodes=proxysql://10.10.10.23?db_username=bob&db_password=b0b&db_database=‘*.*'&db_privs=‘SELECT,INSERT,UPDATE'

ok, so to summarise it will be possible to do this:

s9s cluster --create-account --cluster-id=1  --username=pip --password=passwd —database=“*.*”  —privs=“REPLICATION CLIENT"

but also

s9s cluster --create-account --cluster-id=1  --username=pip --password=passwd —compact-priv-format=“*.*: REPLICATION CLIENT”

o DONE
  Make sure we have a meaningful error string if we try to use 
  http:// communication.

  Authentication failed: Invalid clusterId path: 'v2'

o DONE
  s9s cluster —add-node
  with --cluster-name

o 
  Implement s9s cluster —delete-account

o 
  s9s node —stop/—start  —nodes=mysql://10.10.10.10

o 
  s9s cluster —change-config —nodes=mysql://10.10.10.10  —group=mysqld  —variable=max_connections —value=200



o 
  Adding a feature to list accounts.

mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(16)                          | NO   | PRI |                       |       |
| Password               | char(41)                          | NO   |     |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | YES  |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+




















Laszlo, I would like to sync up tomorrow about the CmonCommandHandlerWorker
 and the

Laszlo - great work on the command  line tool (flex) 

What do you think about:

1)  Fix up so that ’s9s cluster —add-node’  accepts —cluster_name as well? Now it requires an cluster Id, and is then node consistent with the —create-database/create-account e.g (perhaps there are more like this)

s9s cluster --add-node  --cluster-id=$CID  --nodes='proxysql://10.10.10.17' --wait

^^ i think this is ready.

2) implement ‘s9s cluster —delete-account … ’

3) stop/start nodes, e.g:

s9s node —stop/—start  —nodes=mysql://10.10.10.10
or
s9s cluster —stop-node/—start-node  —nodes=mysql://10.10.10.10

4) Then i am quite keen on being able to make config changes on the nodes , and list config data from a node 
e.g:
s9s cluster —change-config —nodes=mysql://10.10.10.10  —group=mysqld  —variable=max_connections —value=200

i can write atleast the code in cmonabstractmysqlcluster  for this as we want to try to do a “SET GLOBAL max_connections=200” and if that is not supported to be changed dynamically, we will in any case update the my.cnf file and prompt the user that a restart of the node is required. Not sure how it works in postgres/mongodb yet however..
[15:49:20] Pere László: I made most of these. Only the "make config changes on the nodes" is not finished.
[15:49:56] Pere László: I am not sure about the start/stop though.
[15:51:11] David Kedves: { "command": "start", "job_data": { "hostname": "STRING", "port": INT } }
[15:51:24] David Kedves: this should work for all kind of nodes ^ (and "stop" is the same)
[15:51:45] Pere László: easy to implement then
[15:51:51] David Kedves: however i am not sure about why Johan wrote nodes
[15:52:08] David Kedves: maybe thats the name of argument we have already in place, i dunno
[15:52:30] Pere László: Thats an argument we always use.
[15:52:37] David Kedves: aha, ok i c


s9s cluster —change-config —nodes=mysql://10.10.10.10  —group=mysqld  —variable=max_connections —value=200


It would be also cool to do on multiple nodes:

s9s cluster —change-config —nodes=mysql://10.10.10.10;10.10.10.11;10.10.10.12  —group=mysqld  —variable=max_connections —value=200
