Merge from 16:c69657910890
This commit is contained in:
commit
b44afdbfdb
9 files changed
+87
-8
No files matched your search
@@ -131,6 +131,33 @@ func (this *VultureBackend) wrapDocumentWithMetadata(doc interface{}, query *mgo
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (this *VultureBackend) GetStat(key string) (interface{}, error) {
|
||||
s := NewStatAggregator()
|
||||
query := bson.M{key: bson.M{"$exists": true}}
|
||||
iter := this.Collection.Find(query).Select(bson.M{key: 1}).Iter()
|
||||
result := make(map[string]interface{})
|
||||
|
||||
in := make(chan float64)
|
||||
out := make(chan *Stats)
|
||||
go s.AddStats(in, out)
|
||||
|
||||
for iter.Next(&result) {
|
||||
|
||||
if val, ok := result[key]; ok {
|
||||
if fval, isFloat := val.(float64); isFloat {
|
||||
in <- fval
|
||||
} else if ival, isInt := val.(int); isInt {
|
||||
in <- float64(ival)
|
||||
}
|
||||
}
|
||||
}
|
||||
close(in)
|
||||
if err := iter.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return <-out, nil
|
||||
}
|
||||
|
||||
func (this *VultureBackend) GetAllDocuments(query interface{}) (interface{}, error) {
|
||||
var result []map[string]interface{}
|
||||
|
||||
@@ -241,3 +268,17 @@ func getDocumentByQueryAndIndex(w http.ResponseWriter, request *http.Request) (i
|
||||
}
|
||||
return vb.GetDocumentByIndex(index, query)
|
||||
}
|
||||
|
||||
func getStats(w http.ResponseWriter, request *http.Request) (interface{}, error) {
|
||||
vb, err := GetVultureBackend(request)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
vars := mux.Vars(request)
|
||||
key, ok := vars["key"]
|
||||
if !ok {
|
||||
return nil, errors.New("key field not specified")
|
||||
}
|
||||
return vb.GetStat(key)
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
root = this;
|
||||
|
||||
humanValueOfStatisticalAbreviation =
|
||||
mean: "mean"
|
||||
std: "standard deviation"
|
||||
var: "variance"
|
||||
|
||||
|
||||
root.controllers.controller('keyStatCtrl', ['$scope', '$routeParams', '$http', ($scope, $routeParams, $http) ->
|
||||
$scope.name = "didier!"
|
||||
$scope.stats = []
|
||||
|
||||
url = "/api/#{ $routeParams.server }/#{ $routeParams.database }/#{ $routeParams.collection }"
|
||||
url = "#{ url }/stats/#{$routeParams.key}"
|
||||
|
||||
$http.get(url).then((res) ->
|
||||
for key, val of res.data
|
||||
$scope.stats.push({name: humanValueOfStatisticalAbreviation[key], value: val })
|
||||
)
|
||||
|
||||
])
|
||||
|
||||
@@ -15,6 +15,10 @@ hasIndexDesc = (keyName, indexes) ->
|
||||
has2dIndex = (keyName, indexes) ->
|
||||
hasIndex("$2dsphere:#{keyName}", indexes)
|
||||
|
||||
getStatsUrl = (keyName, routeParams)->
|
||||
r = routeParams
|
||||
"#/#{r.server}/#{r.database}/#{r.collection}/stats/#{ keyName }"
|
||||
|
||||
directive = () ->
|
||||
directive =
|
||||
templateUrl: "/partials/directives/key.html"
|
||||
@@ -27,6 +31,7 @@ directive = () ->
|
||||
indexes: "="
|
||||
controller:["$scope", "$routeParams", ($scope, $routeParams) ->
|
||||
$scope.canMakeHistogram = _.isNumber($scope.value)
|
||||
$scope.statsUrl = getStatsUrl($scope.keyName, $routeParams)
|
||||
$scope.hasIndexDesc = hasIndexDesc($scope.keyName, $scope.indexes)
|
||||
$scope.hasIndexAsc = hasIndexAsc($scope.keyName, $scope.indexes)
|
||||
$scope.has2DIndex = has2dIndex($scope.keyName, $scope.indexes)
|
||||
|
||||
@@ -18,6 +18,7 @@ config(['$routeProvider', ($routeProvider) ->
|
||||
$routeProvider.when('/:server/:database/:collection/_id/:id', {templateUrl: 'partials/document.html', controller: 'documentCtrl'})
|
||||
$routeProvider.when('/:server/:database/:collection/_id/:id/field/:field', {templateUrl: 'partials/field.html', controller: 'fieldCtrl'})
|
||||
$routeProvider.when('/:server/:database/:collection/idx/:idx', {templateUrl: 'partials/document.html', controller: 'documentCtrl'})
|
||||
$routeProvider.when('/:server/:database/:collection/stats/:key', {templateUrl: 'partials/keyStat.html', controller: 'keyStatCtrl'})
|
||||
$routeProvider.when('/:server/:database/:collection/idx/:idx/query/:query', {templateUrl: 'partials/document.html', controller: 'documentCtrl'})
|
||||
$routeProvider.when('/:server/:database/:collection/idx/all/geojson/:key', {templateUrl: 'partials/geojsonmap.html', controller: 'geojsonmapCtrl'})
|
||||
$routeProvider.when('/:server/:database/:collection/idx/:idx/geojson/:key', {templateUrl: 'partials/geojsonmap.html', controller: 'geojsonmapCtrl'})
|
||||
|
||||
+2
-1
@@ -31,7 +31,7 @@
|
||||
<div class="large-12 columns">
|
||||
<ul class="breadcrumbs">
|
||||
<li ng-repeat="p in path" ng-class="{current: $last, unavailable: getHistoryUrl($index)== ''}">
|
||||
<a ng-href="{{getHistoryUrl($index)}}"> {{ p }} </a>
|
||||
<a ng-href="{{getHistoryUrl($index)}}" ng-bind="p"> </a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -60,6 +60,7 @@
|
||||
<script src="js/controllers/documentCtrl.js"></script>
|
||||
<script src="js/controllers/geojsonmapCtrl.js"></script>
|
||||
<script src="js/controllers/fieldCtrl.js"></script>
|
||||
<script src="js/controllers/keyStatCtrl.js"></script>
|
||||
|
||||
<script src="js/directives/key.js"></script>
|
||||
<script src="js/directives/value.js"></script>
|
||||
|
||||
@@ -3,14 +3,11 @@
|
||||
|
||||
<span ng-style="{visibility: showTools ? 'inline': 'hidden'}">
|
||||
<!-- place to but some hoover information-->
|
||||
<i class="fa fa-signal" ng-show="canMakeHistogram"></i>
|
||||
<a ng-href="{{ statsUrl }}"><i class="fa fa-signal" ng-show="canMakeHistogram"></i></a>
|
||||
</span>
|
||||
<span class="right" style="color:#008CBA;">
|
||||
<i class="fa fa-sort-numeric-asc" ng-show="hasIndexAsc"></i>
|
||||
<i class="fa fa-sort-numeric-desc" ng-show="hasIndexDesc"></i>
|
||||
<a class="fa fa-globe" ng-show="has2DIndex" ng-href="{{ getGeoJsonUrl() }}" target="_blank"></a>
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="columns large-12">
|
||||
<ul class="pricing-table">
|
||||
<li class="title" ng-bind="name"></li>
|
||||
<li class="bullet-item" ng-repeat="stat in stats">
|
||||
<code>{{stat.name}} : {{stat.value | number | replaceAllCommasBySpaces }}</code>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -91,6 +91,7 @@ func serveApi(router *mux.Router) {
|
||||
router.Handle("/{server}/{database}/collections", ApiHandler(getAvailableCollections))
|
||||
router.Handle("/{server}/{database}/{collection}/idx/{index:[0-9]+}", ApiHandler(getDocumentByIndex))
|
||||
router.Handle("/{server}/{database}/{collection}/_id/{id}", ApiHandler(getDocumentById))
|
||||
router.Handle("/{server}/{database}/{collection}/stats/{key}", ApiHandler(getStats))
|
||||
router.Handle("/{server}/{database}/{collection}/all", ApiHandler(getAllDocuments))
|
||||
router.Handle("/{server}/{database}/{collection}/query/{query}/idx/{index:[0-9]+}", ApiHandler(getDocumentByQueryAndIndex))
|
||||
router.Handle("/{server}/{database}/{collection}/query/{query}/all", ApiHandler(getAllDocuments))
|
||||
|
||||
+3
-3
@@ -18,6 +18,6 @@ MongoServers:
|
||||
-
|
||||
name: localhost
|
||||
url: localhost:27017
|
||||
# -
|
||||
# name: example
|
||||
# url: mongodb://username:password@ds90210.mongolab.com:52652/database_name
|
||||
-
|
||||
name: mongolab
|
||||
url: mongodb://ustraca:9OApiiV9En85bBFGfVyYKH4C@ds049288.mongolab.com:49288/ustraca
|
||||
Reference in new issue
Block a user