A templating utility for populating a CouchDB instance with data.
Template macros are have the form: #{macro_name(param1,param2,param3,...)}
Example document template:
{
"type": "#{pick(human,orc,elf,dwarf)}",
# comment, this will be ignored
"category": "#{pick(warrior,assassin,thief,paladin,priest,wizard)}",
"ratio": #{random_int(0, 1)}.#{random_int(0, 9)},
"level": #{random_int(1, 20)},
# randomly generated base64 string with 5 to 50 characters
"variable_length_string": "#{random_string(#{random_int(5, 50)})}",
"integers": [
#{random_int(0, 100000)}, #{random_int(0, 100000)},
#{random_int(0, 100000)}, #{random_int(0, 100000)},
#{random_int(0, 100000)}, #{random_int(0, 100000)}
],
"nested": {
"coords": [
{
"x": #{random_int(0, 200000)}.#{random_int(0, 100)},
"y": #{random_int(0, 200000)}.#{random_int(0, 100)}
},
{
"x": #{random_int(0, 200000)}.#{random_int(0, 100)},
"y": #{random_int(0, 200000)}.#{random_int(0, 100)}
}
],
"string1": "#{random_string(23)}",
"string2": "#{random_string(12)}",
"string3": "#{random_string(18)}",
"dict": {
"#{random_string(8)}": #{random_int(0, 20000)},
"#{random_string(8)}": #{random_int(0, 70)},
"#{random_string(8)}": #{random_int(0, 200)},
"#{random_string(8)}": #{random_int(0, 10000)}
}
}
"_attachments": {
"lorem.txt": {
"content_type": "text/plain",
"data": "#{file(lorem2.txt)}"
},
"#{if(#{random_int(1, 2)} == 1)}hello.md": {
"content_type": "application/markdown",
"data": "I will be base64 encoded, and have 50% of chances to be in a real document"
}
}
$ ./seatoncouch.rb --help
Usage: seatoncouch.rb [OPTION]*
Templating tool to populate a CouchDB instance with data.
Options:
-h, --help Displays this help and exits.
--debug Enable debug mode.
--host Name or address of the CouchDB instance.
Defaults to `localhost'
--port Port of the CouchDB instance.
Defaults to `5984'
--dbs count Number of DBs to create.
Defaults to `1'
--bulk-batch doc_count When uploading documents to CouchDB, use
the _bulk_docs API with doc_count documents
for each POST request to db/_bulk_docs.
By default the _bulk_docs API is not used.
--docs count Number of docs to create per DB.
Defaults to `100'
--revs-per-doc count The number of revisions each document will
have. Each revision will have exactly the
same data.
Defaults to `1'
--conflicts-per-doc count The number of conflicting revisions (leafs)
to create for each inserted document.
By default no conflicts version are created.
Note: this option only works if the bulk batch
option is used as well.
--threads count Number of threads to use for uploading
documents and attachments to each DB.
The document IDs range is partitionned
evenly between the threads.
Defaults to `1'
--users count Number of users to create.
Defaults to `10'
--db-start-id number The ID to assign to the first created DB.
Subsequent DBs will have an ID which is an
increment of this initial ID.
Defaults to `1'
--db-prefix string A string prefix to prepend to each DB name.
Defaults to `testdb'
--doc-start-id number The ID to assign to the first created doc for
each created DB.
Subsequent docs will have an ID which is an
increment of this initial ID.
Defaults to `1'
--user-start-id number The ID to assign to the first created user.
Subsequent users will have an ID which is an
increment of this initial ID.
Defaults to `1'
--user-prefix string A string prefix to prepend to each user name.
Defaults to `user'
--doc-tpl file The template to use for each doc.
Defaults to `default_doc.tpl'
--sec-obj file A file containing the JSON security object
to add to each created DB.
Defaults to none.
--recreate-dbs If a DB already exists, it is deleted and created.
--times If specified, CouchDB's response time for each
document and attachment PUT request will be reported
as well as average response times.
--http-basic-username Username for HTTP Basic Authentication.
--http-basic-password Password for HTTP Basic Authentication.