<?php
// Run script from CLI using:
// # php galera-lock-replication.php

// Fill in Node 1 DB connection information here
define('DB_HOST1', '<PROXYSQL IP>');
define('DB_USER1', '<USERNAME>');
define('DB_PASS1', '<PASSWORD>');
define('DB_NAME1', 'galera_locks_test');
define('DB_PORT1', '<PROXYSQ PORT>');

run();

function run() {
    // Get DB connection for node 1
    try{
        $conn = getDbConnection();
        
        // Make sure the connection is still available
        performTest($conn);
        logString("\n\n");
        
        // Close connection with node 1
        mysqli_close($conn);
    } catch (Exception $e) {
        // Close connection with node 1
        mysqli_close($conn);
    }
}

function performTest($conn) {
    $randomString = generateRandomString(32);
    logString("Generating random string: " . $randomString);
    
    if (!update($conn, $randomString)) {
        logString("String $randomString cannot be updated.");
    } else {
	    logString("OK.");
	}
}

function getDbConnection() {
    logString("Getting connection for DB ... ");
    $connection = mysqli_init();
    
    // Specify connection timeout
    mysqli_options($connection, MYSQLI_OPT_CONNECT_TIMEOUT, 1);
    
    mysqli_real_connect($connection, DB_HOST1, DB_USER1, DB_PASS1, DB_NAME1, DB_PORT1);
    return $connection;
}

function update($conn, $randomString) {
    logString("Trying to update ...");
    
    $return = false;
    $sql = "UPDATE `lock_table` SET `string_value`='" . $randomString . "' WHERE `id`=1";
    $result = mysqli_query($conn, $sql);
    if (!$result) {
        logString(mysqli_error($conn));
    } else {
        $return = true;
    }
    return $return;
}

/**
 * Generates a string of given length
 *
 * @param $length
 * @return string
 */
function generateRandomString($length){
    $chars_set = array(
        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
        //	'~', '`', '!', '@', '#', '$', '&', '*', '(', ')', '{', '}', '[', ']', '|', ':', '?'
    );
    
    $rnd_string = "";
    $number_of_characters = count($chars_set);
    for ($i = 0; $i < $length; $i++){
        $subset_index = (mt_rand(0, $number_of_characters) + mt_rand(0, 1000000)) % $number_of_characters;
        $character = $chars_set[$subset_index];
        $rnd_string .= $character;
    }
    return $rnd_string;
}

function logString($message) {
    echo date('Y-m-d H:i:s') . ' ' . $message . "\n";
}
?>