Commit d889af7d authored by Paul Asmuth's avatar Paul Asmuth
Browse files

Merge branch 'fnordmetric2' of github.com:paulasmuth/fnordmetric-dev into fnordmetric2

parents e4fe4b53 4966df81
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -60,6 +60,9 @@ loop do
        :metric => "load_avg_15m",
        :value => loadavg[2],
        :labels => {
          :host => hostname
        }
      }

  # gather basic memory statistics

@@ -192,3 +195,5 @@ loop do
  sleep_for = (last_run + INTERVAL) - Time.now.to_f
  sleep(sleep_for) if sleep_for > 0
end
end
end
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ build:
	      fnordmetric-webui-visualeditorview.js \
	      fnordmetric-webui-queryresultview.js \
	      fnordmetric-webui-singlemetricview.js \
	      fnordmetric-webui-autocomplete.js \
	      codemirror.js \
	) > fnordmetric-webui.js

+119 −0
Original line number Diff line number Diff line
/**
 * This file is part of the "FnordMetric" project
 *   Copyright (c) 2014 Laura Schlimmer
 *   Copyright (c) 2014 Paul Asmuth, Google Inc.
 *
 * FnordMetric is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License v3.0. You should have received a
 * copy of the GNU General Public License along with this program. If not, see
 * <http://www.gnu.org/licenses/>.
 */
if (FnordMetric === undefined) {
  FnordMetric = {};
}

if (FnordMetric.views === undefined) {
  FnordMetric.views = {};
}

FnordMetric.util.Autocomplete = function(elem, input, callback) {
  var source = [];
  // /metrics
  var position;
  var list = document.createElement("ul");
  var items;
  var list_items = [];
  var current_value;
  list.className = "autocomplete";

  function renderListItems() {
    list_items = [];
    items.map(function(item) {
      var li = document.createElement("li");
      li.innerHTML = "<a href='#'>"+item+"</href>";
      list.appendChild(li);
      list_items.push(li);
    });
  }

  function keyNavigation(list_items, i) {
    if (i < list_items.length) {
      if (i > 0) {
        list_items[i - 1].className = "";
      }
      if (i+1 < list_items.length) {
        list_items[i+1].className = "";
      }
      list_items[i].className = "hover";
    }
  }

  function resetList() {
    list.innerHTML = "";
    position = -1;
    current_value = "";
  }

  function init() {

    input.addEventListener('focus', function() {
      resetList();
      renderListItems();
      elem.appendChild(list);
    }, false);

    input.addEventListener('blur', function() {
      elem.removeChild(list);
    }, false);

    input.addEventListener('input', function() {
      items = FnordMetric.util.filterStringArray(
        source, input.value);
      resetList();
      renderListItems();
      elem.appendChild(list);
    }, false);

    input.addEventListener('keydown', function(e) {
      switch (e.keyCode) {
        case 13:
          e.preventDefault();
          if (current_value.length > 0){
            input.value = current_value;
            resetList();
          } else {
            callback(input.value);
          }
          break;
        case 38:
          position--;
          keyNavigation(
            list_items, position);
          current_value = items[position];
          break;
        case 40:
          position++;
          keyNavigation(
            list_items, position);
          current_value = items[position];
          break;
        default:
          break;
      }
    }, false);
  }

  FnordMetric.httpGet("/metrics", function(r) {
    if (r.status == 200) {
      var json = JSON.parse(r.response);
      json.metrics.map(function(metric) {
        source.push(metric.key);
      });
      items = source;
      init();
    }
  });


}
+11 −1
Original line number Diff line number Diff line
@@ -39,11 +39,21 @@ FnordMetric.WebUI = function() {
    });
  }

  function setSearchUrl(input) {
    var input = FnordMetric.util.htmlEscape(input);
    FnordMetric.WebUI.singleton.openUrl(
      "metric_list?search="+input);
  }

  function addSearchBar() {
    var searchbar = document.createElement("div");
    searchbar.className = "searchbar";
    searchbar.innerHTML = "<i class='fa fa-search'></i><input />";
    var searchinput = document.createElement("input");
    searchbar.innerHTML = "<i class='fa fa-search'></i>";
    searchbar.appendChild(searchinput);
    headbar.appendChild(searchbar);
    FnordMetric.util.Autocomplete(
      searchbar,searchinput, setSearchUrl);
  }

  function init() {
+12 −86
Original line number Diff line number Diff line
@@ -345,95 +345,21 @@ FnordMetric.util.searchMetricList = function(metrics, search_item) {
  return data;
}


FnordMetric.DropdownAutocomplete = function(
  parentNode, dropdown, input_field, keys, search_button) {
  var down = 0;
  var current_value = "";
  var dropdownKeyNav = function() {
    var dropdown_items = dropdown.childNodes;
    var i = down -1;
    if (i < dropdown_items.length) {
      if (i > 0) {
        dropdown_items[i - 1].className = "";
      }
      if (i+1 < dropdown_items.length) {
        dropdown_items[i+1].className = "";
      }
      current_value = dropdown_items[i].firstChild.innerHTML;
      dropdown_items[i].className = "hover";
    }
  }

  var destroyDropdown = function() {
    down = 0;
    current_value = "";
    while (dropdown.firstChild) {
      dropdown.removeChild(dropdown.firstChild);
    }
FnordMetric.util.htmlEscape = function(str) {
  return str;
}



  var autocomplete = function(input) {
    destroyDropdown();
    parentNode.appendChild(dropdown);

    keys.map(function(key) {
      if (key.indexOf(input) > - 1) {
        var dropdown_item = document.createElement("li");
        var dropdown_link = FnordMetric.createButton(
          "#", undefined, key);
        dropdown_item.appendChild(dropdown_link);
        dropdown.appendChild(dropdown_item);

        dropdown_link.addEventListener('click', function(e) {
          e.preventDefault();
          input_field.value = this.innerHTML;
          destroyDropdown();
        }, false);
/* returns all words that includes filter */
FnordMetric.util.filterStringArray = function(strings, filter) {
  //FIXME ?
  var data = [];
  strings.map(function(string) {
    if (string.indexOf(filter) > -1) {
      data.push(string);
    }
  });

  }

  var init = function() {
    input_field.addEventListener('focus', function(e) {
      this.value = "";
    }, false);

    input_field.addEventListener('input', function(e) {
        autocomplete(this.value)
    }, false);

    input_field.addEventListener('keydown', function(e) {
      switch (e.keyCode) {
        case 13:
          e.preventDefault();
          if (current_value.length > 0) {
            input_field.value = current_value;
          } else {
            FnordMetric.WebUI().renderSearchResult(input_field.value);
          }
          destroyDropdown();
          break;
        case 40:
          down++;
          dropdownKeyNav();
          break;
        case 38:
          down--;
          dropdownKeyNav();
          break;
        default:
          break;
      }
    }, false);
  }
  init();
  return data;
}

FnordMetric.util.htmlEscape = function(str) {
  return str;
}
Loading