#!/usr/local/bin/perl
use lib qw(/usr/local/cassandra/interface/gen-perl/Cassandra /usr/local/cassandra/interface/gen-perl);
use strict;

use Cassandra;

use Thrift::Socket;
use Thrift::BinaryProtocol;
use Thrift::FramedTransport;
use Thrift::BufferedTransport;

use Data::Dumper;
use Time::HiRes qw( gettimeofday tv_interval );
use Getopt::Std;
my %opt;
getopts('iu:t:rn:', \%opt);

my $socket = Thrift::Socket->new('localhost', 9160);
   $socket->setSendTimeout(1000);
   $socket->setRecvTimeout(5000);
my $transport =  Thrift::BufferedTransport->new($socket, 1024, 1024);
my $protocol = Thrift::BinaryProtocol->new($transport);
my $client = Cassandra::CassandraClient->new($protocol);

$transport->open();


eval {
	my $id=0;
	for(;;) {
		$id++;
		my $PID = sprintf("%040lld", int(1000000 * rand()));
		$client->batch_insert(
			'Keyspace1',
			$PID,
			{ 
				'Standard1' => _makeColumnList ({
					map {
						$_=>'0'x(int(1 + 100 * rand()))
					} (0..int(1+10*rand()))
				})
			},
			Cassandra::ConsistencyLevel::ONE
		);

		$client->remove(
			'Keyspace1',
			$PID,
			Cassandra::ColumnPath->new({
				column_family=>'Standard1',
			}),
			time(),
			Cassandra::ConsistencyLevel::ONE
		);
		print "$id\n" if ($id%100 == 0);
	}
};

die Dumper($@) if ($@);

$transport->close();

sub _makeColumnList($$) {
    my ($row) = @_;

	my @cfmap;
		 
	foreach my $k (keys %$row) {
		push @cfmap, Cassandra::ColumnOrSuperColumn->new({
			column=>Cassandra::Column->new({
				name=>$k,
				value=>$row->{$k},
				timestamp=>time(),
			})
		});
	}
	die if $#cfmap < 0;
	return \@cfmap;
}
																											

