2015-08-28 05:54:45 +00:00
/ *
2016-06-03 00:25:58 +00:00
Copyright 2015 The Kubernetes Authors .
2015-08-28 05:54:45 +00:00
Licensed 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 .
* /
package initialresources
import (
"flag"
"fmt"
"time"
"k8s.io/kubernetes/pkg/api"
)
var (
2017-01-09 21:17:23 +00:00
influxdbHost = flag . String ( "ir-influxdb-host" , "localhost:8080/api/v1/namespaces/kube-system/services/monitoring-influxdb:api/proxy" , "Address of InfluxDB which contains metrics required by InitialResources" )
2015-08-28 05:54:45 +00:00
user = flag . String ( "ir-user" , "root" , "User used for connecting to InfluxDB" )
// TODO: figure out how to better pass password here
2015-09-29 22:14:37 +00:00
password = flag . String ( "ir-password" , "root" , "Password used for connecting to InfluxDB" )
2016-10-04 15:51:14 +00:00
db = flag . String ( "ir-dbname" , "k8s" , "InfluxDB database name which contains metrics required by InitialResources" )
2015-09-29 22:14:37 +00:00
hawkularConfig = flag . String ( "ir-hawkular" , "" , "Hawkular configuration URL" )
2015-08-28 05:54:45 +00:00
)
// WARNING: If you are planning to add another implementation of dataSource interface please bear in mind,
// that dataSource will be moved to Heapster some time in the future and possibly rewritten.
type dataSource interface {
// Returns <perc>th of sample values which represent usage of <kind> for containers running <image>,
2016-10-04 15:51:14 +00:00
// within time range (start, end), number of samples considered and error if occurred.
2015-08-28 05:54:45 +00:00
// If <exactMatch> then take only samples that concern the same image (both name and take are the same),
// otherwise consider also samples with the same image a possibly different tag.
2015-10-02 10:08:22 +00:00
GetUsagePercentile ( kind api . ResourceName , perc int64 , image , namespace string , exactMatch bool , start , end time . Time ) ( usage int64 , samples int64 , err error )
2015-08-28 05:54:45 +00:00
}
func newDataSource ( kind string ) ( dataSource , error ) {
if kind == "influxdb" {
return newInfluxdbSource ( * influxdbHost , * user , * password , * db )
}
if kind == "gcm" {
return newGcmSource ( )
}
2015-10-02 07:20:56 +00:00
if kind == "hawkular" {
2015-09-29 22:14:37 +00:00
return newHawkularSource ( * hawkularConfig )
2015-08-28 05:54:45 +00:00
}
2016-07-25 19:53:19 +00:00
return nil , fmt . Errorf ( "unknown data source %v" , kind )
2015-08-28 05:54:45 +00:00
}