blob: 652671971f74aa3d851db93a4261060ed2693d9d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
var htrace = htrace || {};
htrace.checkStringIsPositiveWholeNumber = function(val) {
if (!val.match(/^[0-9]([0-9]*)$/)) {
if (!val.match(/[^\s]/)) {
throw "You entered an empty string into a numeric field.";
}
throw "Non-numeric characters found.";
}
};
htrace.checkStringIsNotEmpty = function(val) {
if (!val.match(/[^\s]/)) {
throw "You entered an empty string into a text field.";
}
};
// Predicate type
htrace.PType = Backbone.Model.extend({
initialize: function(options) {
this.name = options.name;
this.field = options.field;
this.op = options.op;
},
// Try to normalize a value of this type into something htraced can accept.
// Returns a string containing the normalized value on success. Throws a
// string explaining the parse error otherwise.
// Dates are represented by milliseconds since the epoch; span ids don't start
// with 0x.
normalize: function(val) {
switch (this.field) {
case "begin":
return htrace.parseDate(val).valueOf().toString();
case "end":
return htrace.parseDate(val).valueOf().toString();
case "description":
htrace.checkStringIsNotEmpty(val);
return val;
case "duration":
htrace.checkStringIsPositiveWholeNumber(val);
return val;
case "spanid":
return htrace.normalizeSpanId(val);
case "tracerid":
htrace.checkStringIsNotEmpty(val);
return val;
default:
return "Normalization not implemented for field '" + this.field + "'";
}
},
getDefaultValue: function() {
switch (this.field) {
case "begin":
return htrace.dateToString(moment());
case "end":
return htrace.dateToString(moment());
case "description":
return "";
case "duration":
return "0";
case "spanid":
return "";
case "tracerid":
return "";
default:
return "(unknown)";
}
}
});
htrace.parsePType = function(name) {
switch (name) {
case "Began after":
return new htrace.PType({name: name, field:"begin", op:"gt"});
case "Began at or before":
return new htrace.PType({name: name, field:"begin", op:"le"});
case "Ended after":
return new htrace.PType({name: name, field:"end", op:"gt"});
case "Ended at or before":
return new htrace.PType({name: name, field:"end", op:"le"});
case "Description contains":
return new htrace.PType({name: name, field:"description", op:"cn"});
case "Description is exactly":
return new htrace.PType({name: name, field:"description", op:"eq"});
case "Duration is longer than":
return new htrace.PType({name: name, field:"duration", op:"gt"});
case "Duration is at most":
return new htrace.PType({name: name, field:"duration", op:"le"});
case "Span ID is":
return new htrace.PType({name: name, field:"spanid", op:"eq"});
case "TracerId contains":
return new htrace.PType({name: name, field:"tracerid", op:"cn"});
case "TracerId is exactly":
return new htrace.PType({name: name, field:"tracerid", op:"eq"});
default:
return null
}
};
htrace.Predicate = function(options) {
this.op = options.ptype.op;
this.field = options.ptype.field;
this.val = options.val;
return this;
};