Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
V
variety
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fact-gitdep
variety
Commits
757550aa
Commit
757550aa
authored
Oct 30, 2014
by
Tomas Dvorak
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Results printed as a ascii table (and added json switch)
parent
4132a0fb
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
86 additions
and
10 deletions
+86
-10
Variety.java
test/src/main/java/com/github/variety/Variety.java
+13
-0
OutputFormatTest.java
...c/test/java/com/github/variety/test/OutputFormatTest.java
+27
-5
ParametersParsingTest.java
...t/java/com/github/variety/test/ParametersParsingTest.java
+21
-0
variety.js
variety.js
+25
-5
No files found.
test/src/main/java/com/github/variety/Variety.java
View file @
757550aa
...
@@ -23,11 +23,14 @@ public class Variety {
...
@@ -23,11 +23,14 @@ public class Variety {
* Hardcoded database name in variety.js for analysis results
* Hardcoded database name in variety.js for analysis results
*/
*/
public
static
final
String
VARIETY_RESULTS_DBNAME
=
"varietyResults"
;
public
static
final
String
VARIETY_RESULTS_DBNAME
=
"varietyResults"
;
public
static
final
String
FORMAT_JSON
=
"json"
;
public
static
final
String
FORMAT_ASCII
=
"ascii"
;
public
static
final
String
PARAM_QUERY
=
"query"
;
public
static
final
String
PARAM_QUERY
=
"query"
;
public
static
final
String
PARAM_SORT
=
"sort"
;
public
static
final
String
PARAM_SORT
=
"sort"
;
public
static
final
String
PARAM_MAXDEPTH
=
"maxDepth"
;
public
static
final
String
PARAM_MAXDEPTH
=
"maxDepth"
;
public
static
final
String
PARAM_LIMIT
=
"limit"
;
public
static
final
String
PARAM_LIMIT
=
"limit"
;
public
static
final
String
PARAM_OUTPUT_FORMAT
=
"outputFormat"
;
private
final
String
inputDatabase
;
private
final
String
inputDatabase
;
...
@@ -38,6 +41,7 @@ public class Variety {
...
@@ -38,6 +41,7 @@ public class Variety {
private
Integer
maxDepth
;
private
Integer
maxDepth
;
private
String
query
;
private
String
query
;
private
String
sort
;
private
String
sort
;
private
String
outputFormat
;
private
boolean
verbose
=
true
;
private
boolean
verbose
=
true
;
...
@@ -99,6 +103,11 @@ public class Variety {
...
@@ -99,6 +103,11 @@ public class Variety {
return
this
;
return
this
;
}
}
public
Variety
withFormat
(
final
String
format
)
{
this
.
outputFormat
=
format
;
return
this
;
}
/**
/**
* Enable analysis output stdout of script to stdout of java process.
* Enable analysis output stdout of script to stdout of java process.
* Deprecated because it should only be used for debugging of test, not real/production tests itself. If you
* Deprecated because it should only be used for debugging of test, not real/production tests itself. If you
...
@@ -154,6 +163,10 @@ public class Variety {
...
@@ -154,6 +163,10 @@ public class Variety {
args
.
add
(
PARAM_SORT
+
" = "
+
sort
);
args
.
add
(
PARAM_SORT
+
" = "
+
sort
);
}
}
if
(
outputFormat
!=
null
)
{
args
.
add
(
PARAM_OUTPUT_FORMAT
+
" = '"
+
outputFormat
+
"'"
);
}
return
args
.
toString
();
return
args
.
toString
();
}
}
...
...
test/src/test/java/com/github/variety/test/
JsonOutpu
tTest.java
→
test/src/test/java/com/github/variety/test/
OutputForma
tTest.java
View file @
757550aa
...
@@ -9,12 +9,10 @@ import org.junit.Assert;
...
@@ -9,12 +9,10 @@ import org.junit.Assert;
import
org.junit.Before
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.Test
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
import
java.util.stream.Stream
;
/**
public
class
OutputFormatTest
{
* Variety outputs json-like results to stdout. Lets verify that.
*/
public
class
JsonOutputTest
{
private
Variety
variety
;
private
Variety
variety
;
...
@@ -32,7 +30,7 @@ public class JsonOutputTest {
...
@@ -32,7 +30,7 @@ public class JsonOutputTest {
@Test
@Test
public
void
verifyJsonEntries
()
throws
Exception
{
public
void
verifyJsonEntries
()
throws
Exception
{
final
VarietyAnalysis
analysis
=
variety
.
runAnalysis
();
final
VarietyAnalysis
analysis
=
variety
.
withFormat
(
Variety
.
FORMAT_JSON
).
runAnalysis
();
// TODO: output itself is not valid JSON. It contains mongo shell output (can be removed with --quiet) and variety execution info.
// TODO: output itself is not valid JSON. It contains mongo shell output (can be removed with --quiet) and variety execution info.
// At the end of output, there are printed records from result collection, every record on new line.
// At the end of output, there are printed records from result collection, every record on new line.
...
@@ -47,4 +45,28 @@ public class JsonOutputTest {
...
@@ -47,4 +45,28 @@ public class JsonOutputTest {
// there should be seven different json results in the stdout
// there should be seven different json results in the stdout
Assert
.
assertEquals
(
7
,
objects
.
count
());
Assert
.
assertEquals
(
7
,
objects
.
count
());
}
}
@Test
public
void
verifyAsciiTableOutput
()
throws
Exception
{
final
VarietyAnalysis
analysis
=
variety
.
withFormat
(
Variety
.
FORMAT_ASCII
).
runAnalysis
();
// filter only lines starting with character '|'
final
String
actual
=
Stream
.
of
(
analysis
.
getStdOut
().
split
(
"\n"
))
.
filter
(
line
->
line
.
startsWith
(
"|"
))
.
collect
(
Collectors
.
joining
(
"\n"
));
final
String
expected
=
"| key | types | occurrences | percents |\n"
+
"| ------------------ | ------------ | ----------- | -------- |\n"
+
"| _id | ObjectId | 5 | 100 |\n"
+
"| name | String | 5 | 100 |\n"
+
"| bio | String | 3 | 60 |\n"
+
"| pets | String,Array | 2 | 40 |\n"
+
"| birthday | String | 2 | 40 |\n"
+
"| someBinData | BinData-old | 1 | 20 |\n"
+
"| someWeirdLegacyKey | String | 1 | 20 |"
;
Assert
.
assertEquals
(
expected
,
actual
);
}
}
}
test/src/test/java/com/github/variety/test/ParametersParsingTest.java
View file @
757550aa
...
@@ -79,6 +79,27 @@ public class ParametersParsingTest {
...
@@ -79,6 +79,27 @@ public class ParametersParsingTest {
}
}
}
}
@Test
public
void
testDefaultOutputFormatParam
()
throws
Exception
{
final
VarietyAnalysis
analysis
=
variety
.
runAnalysis
();
// format option not provided
final
Map
<
String
,
String
>
params
=
getParamsMap
(
analysis
.
getStdOut
());
Assert
.
assertEquals
(
"ascii"
,
params
.
get
(
Variety
.
PARAM_OUTPUT_FORMAT
));
}
@Test
public
void
testAsciiOutputFormatParam
()
throws
Exception
{
final
VarietyAnalysis
analysis
=
variety
.
withFormat
(
Variety
.
FORMAT_ASCII
).
runAnalysis
();
final
Map
<
String
,
String
>
params
=
getParamsMap
(
analysis
.
getStdOut
());
Assert
.
assertEquals
(
"ascii"
,
params
.
get
(
Variety
.
PARAM_OUTPUT_FORMAT
));
}
@Test
public
void
testJsonOutputFormatParam
()
throws
Exception
{
final
VarietyAnalysis
analysis
=
variety
.
withFormat
(
Variety
.
FORMAT_JSON
).
runAnalysis
();
final
Map
<
String
,
String
>
params
=
getParamsMap
(
analysis
.
getStdOut
());
Assert
.
assertEquals
(
"json"
,
params
.
get
(
Variety
.
PARAM_OUTPUT_FORMAT
));
}
/**
/**
* @param stdout Text from mongo shell, containing variety config output + json results
* @param stdout Text from mongo shell, containing variety config output + json results
* @return Map of config values
* @return Map of config values
...
...
variety.js
View file @
757550aa
...
@@ -62,8 +62,10 @@ print('Using maxDepth of ' + maxDepth);
...
@@ -62,8 +62,10 @@ print('Using maxDepth of ' + maxDepth);
if
(
typeof
sort
===
'undefined'
)
{
var
sort
=
{
_id
:
-
1
};
}
if
(
typeof
sort
===
'undefined'
)
{
var
sort
=
{
_id
:
-
1
};
}
print
(
'Using sort of '
+
tojson
(
sort
));
print
(
'Using sort of '
+
tojson
(
sort
));
if
(
typeof
outputFormat
===
'undefined'
)
{
var
outputFormat
=
"ascii"
}
print
(
'Using outputFormat of '
+
outputFormat
);
varietyTypeOf
=
function
(
thing
)
{
varietyTypeOf
=
function
(
thing
)
{
if
(
typeof
thing
===
'undefined'
)
{
throw
'varietyTypeOf() requires an argument'
;
}
if
(
typeof
thing
===
'undefined'
)
{
throw
'varietyTypeOf() requires an argument'
;
}
...
@@ -160,7 +162,7 @@ db[collection].find(query).sort(sort).limit(limit).forEach(function(obj) {
...
@@ -160,7 +162,7 @@ db[collection].find(query).sort(sort).limit(limit).forEach(function(obj) {
interimResults
[
key
][
'types'
][
valueType
]
=
true
;
interimResults
[
key
][
'types'
][
valueType
]
=
true
;
interimResults
[
key
][
'totalOccurrences'
]
++
;
interimResults
[
key
][
'totalOccurrences'
]
++
;
}
}
}
}
});
});
...
@@ -216,6 +218,24 @@ resultsDB[resultsCollectionName].find({}).forEach(function(key) {
...
@@ -216,6 +218,24 @@ resultsDB[resultsCollectionName].find({}).forEach(function(key) {
});
});
var
sortedKeys
=
resultsDB
[
resultsCollectionName
].
find
({}).
sort
({
totalOccurrences
:
-
1
});
var
sortedKeys
=
resultsDB
[
resultsCollectionName
].
find
({}).
sort
({
totalOccurrences
:
-
1
});
sortedKeys
.
forEach
(
function
(
key
)
{
print
(
tojson
(
key
,
''
,
true
));
if
(
outputFormat
===
'json'
)
{
});
sortedKeys
.
forEach
(
function
(
key
)
{
print
(
tojson
(
key
,
''
,
true
));
});
}
else
{
// output nice ascii table with results
var
table
=
[[
"key"
,
"types"
,
"occurrences"
,
"percents"
],
[
""
,
""
,
""
,
""
]];
// header + delimiter rows
sortedKeys
.
forEach
(
function
(
key
)
{
table
.
push
([
key
.
_id
.
key
,
key
.
value
.
types
.
toString
(),
key
.
totalOccurrences
,
key
.
percentContaining
])
});
function
colMaxWidth
(
arr
,
index
)
{
return
Math
.
max
.
apply
(
null
,
arr
.
map
(
function
(
row
){
return
row
[
index
].
toString
().
length
}));
}
function
pad
(
width
,
string
,
symbol
)
{
return
(
width
<=
string
.
length
)
?
string
:
pad
(
width
,
string
+
symbol
,
symbol
);
}
table
.
forEach
(
function
(
row
,
ri
){
print
(
"| "
+
row
.
map
(
function
(
cell
,
i
)
{
return
pad
(
colMaxWidth
(
table
,
i
),
cell
,
ri
==
1
?
"-"
:
" "
)}).
join
(
" | "
)
+
" |"
);
});
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment