diff --git a/change_logs/release_0.10.9.md b/change_logs/release_0.10.9.md new file mode 100644 index 00000000..06da3429 --- /dev/null +++ b/change_logs/release_0.10.9.md @@ -0,0 +1,26 @@ + + +# Release v0.10.9 + +## Notes + +Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated! + +Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer) + +--- + +## Change Logs + +Maintenance release! + +--- + +## Resolved Bugs/Features + +* [Issue #461](https://github.com/derailed/k9s/issues/461) +* [Issue #462](https://github.com/derailed/k9s/issues/462) + +--- + + © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/go.mod b/go.mod index 54ea0506..77e1a0b2 100644 --- a/go.mod +++ b/go.mod @@ -36,7 +36,6 @@ require ( github.com/gdamore/tcell v1.3.0 github.com/ghodss/yaml v1.0.0 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef // indirect - github.com/golang/mock v1.2.0 github.com/google/btree v1.0.0 // indirect github.com/googleapis/gnostic v0.2.0 // indirect github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc // indirect @@ -53,9 +52,7 @@ require ( golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.2.4 - gotest.tools v2.2.0+incompatible k8s.io/api v0.0.0 - k8s.io/apiextensions-apiserver v0.0.0 k8s.io/apimachinery v0.0.0 k8s.io/cli-runtime v0.0.0 k8s.io/client-go v0.0.0 diff --git a/go.sum b/go.sum index 6f5b8c15..3ac1d5c9 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,7 @@ github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEg github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= @@ -22,6 +23,7 @@ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbt github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.3.3 h1:CWUqKXe0s8A2z6qCgkP4Kru7wC11YoAnoupUKFDnH08= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= @@ -93,8 +95,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= -github.com/derailed/tview v0.3.2 h1:By43yu6kbGvA+iL09VAhTKxKEd02BBOtUPIlrkeHxT4= -github.com/derailed/tview v0.3.2/go.mod h1:yApPszFU62FoaGkf7swy2nIdV/h7Nid3dhMSVy6+OFI= github.com/derailed/tview v0.3.3 h1:tipPwxcDhx0zRBZuc8VKIrNgWL40FL5JeF/30XVieUE= github.com/derailed/tview v0.3.3/go.mod h1:yApPszFU62FoaGkf7swy2nIdV/h7Nid3dhMSVy6+OFI= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= @@ -110,7 +110,9 @@ github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c h1:ZfSZ3P3BedhKG github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f h1:8GDPb0tCY8LQ+OJ3dbHb5sA6YZWXFORQYZx5sdsTlMs= github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f h1:AUj1VoZUfhPhOPHULCQQDnGhRelpFWHMLhQVWDsS0v4= github.com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= @@ -246,6 +248,7 @@ github.com/heketi/heketi v9.0.0+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7 github.com/heketi/rest v0.0.0-20180404230133-aa6a65207413/go.mod h1:BeS3M108VzVlmAue3lv2WcGuPAX94/KN63MUURzbYSI= github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/heketi/utils v0.0.0-20170317161834-435bc5bdfa64/go.mod h1:RYlF4ghFZPPmk2TC5REt5OFwvfb6lzxFWrTWB+qs28s= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI= @@ -266,11 +269,14 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= @@ -326,6 +332,7 @@ github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -372,8 +379,6 @@ github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfm github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.14.3 h1:4EGfSkR2hJDB0s3oFfrlPqjU1e4WLncergLil3nEKW0= -github.com/rs/zerolog v1.14.3/go.mod h1:3WXPzbXEEliJ+a6UFE4vhIxV8qR1EML6ngzP9ug4eYg= github.com/rs/zerolog v1.17.2 h1:RMRHFw2+wF7LO0QqtELQwo8hqSmqISyCJeFeAAuWcRo= github.com/rs/zerolog v1.17.2/go.mod h1:9nvC1axdVrAHcu/s9taAVfBuIdTZLVQmKQyvrUjF5+I= github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= @@ -515,7 +520,6 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -529,6 +533,7 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -541,8 +546,10 @@ google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= @@ -553,6 +560,7 @@ gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/internal/config/style.go b/internal/config/style.go index 6ee829b1..8f3f5da0 100644 --- a/internal/config/style.go +++ b/internal/config/style.go @@ -223,7 +223,7 @@ func newGetTable() Table { FgColor: "aqua", BgColor: "black", CursorColor: "aqua", - MarkColor: "violet", + MarkColor: "palegreen", Header: newTableHeader(), } } diff --git a/internal/model/registry.go b/internal/model/registry.go index 0869bf70..958a911b 100644 --- a/internal/model/registry.go +++ b/internal/model/registry.go @@ -50,9 +50,6 @@ var Registry = map[string]ResourceMeta{ }, // Core... - "v1/configmaps": { - Renderer: &render.ConfigMap{}, - }, "v1/endpoints": { Renderer: &render.Endpoints{}, }, @@ -70,9 +67,6 @@ var Registry = map[string]ResourceMeta{ Model: &Node{}, Renderer: &render.Node{}, }, - "v1/secrets": { - Renderer: &render.Secret{}, - }, "v1/services": { Renderer: &render.Service{}, }, diff --git a/internal/model/table.go b/internal/model/table.go index 2e6a2316..5afb22f9 100644 --- a/internal/model/table.go +++ b/internal/model/table.go @@ -13,11 +13,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" ) -const ( - refreshRate = 2 * time.Second - noDataCount = 2 -) - // TableListener represents a table model listener. type TableListener interface { // TableDataChanged notifies the model data changed. @@ -35,7 +30,6 @@ type Table struct { listeners []TableListener inUpdate int32 refreshRate time.Duration - zeroCount int32 } // NewTable returns a new table model. @@ -100,13 +94,14 @@ func (t *Table) updater(ctx context.Context) { select { case <-ctx.Done(): return - case <-time.After(refreshRate): + case <-time.After(t.refreshRate): t.refresh(ctx) } } } func (t *Table) refresh(ctx context.Context) { + log.Debug().Msgf("RECONCILING") if !atomic.CompareAndSwapInt32(&t.inUpdate, 0, 1) { log.Debug().Msgf("Dropping update...") return @@ -142,12 +137,6 @@ func (t *Table) RemoveListener(l TableListener) { } func (t *Table) fireTableChanged(data render.TableData) { - // Needed to wait for the cache to populate but if there is no data at all - // after X ticks need to tell the view no data is present - if len(data.RowEvents) == 0 && atomic.LoadInt32(&t.zeroCount) < noDataCount { - atomic.AddInt32(&t.zeroCount, 1) - return - } for _, l := range t.listeners { l.TableDataChanged(data) } @@ -170,6 +159,10 @@ func (t *Table) list(ctx context.Context, l Lister) ([]runtime.Object, error) { } func (t *Table) reconcile(ctx context.Context) error { + defer func(t time.Time) { + log.Debug().Msgf("RECONCILE elapsed %v", time.Since(t)) + }(time.Now()) + meta, ok := Registry[t.gvr] if !ok { log.Debug().Msgf("Resource %s not found in registry. Going generic!", t.gvr) @@ -186,6 +179,7 @@ func (t *Table) reconcile(ctx context.Context) error { if err != nil { return err } + log.Debug().Msgf("LIST returned %d rows", len(oo)) rows := make(render.Rows, len(oo)) if err := meta.Model.Hydrate(oo, rows, meta.Renderer); err != nil { @@ -201,6 +195,7 @@ func (t *Table) reconcile(ctx context.Context) error { } t.data.Update(rows) t.data.Namespace, t.data.Header = t.namespace, meta.Renderer.Header(t.namespace) + log.Debug().Msgf("TABLE_DATA returns %d rows", len(t.data.RowEvents)) return nil } diff --git a/internal/render/generic.go b/internal/render/generic.go index 4dd9e419..5a36c0de 100644 --- a/internal/render/generic.go +++ b/internal/render/generic.go @@ -6,7 +6,6 @@ import ( "fmt" "strings" - "github.com/rs/zerolog/log" metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" ) @@ -67,7 +66,6 @@ func (g *Generic) Render(o interface{}, ns string, r *Row) error { for _, c := range row.Cells { r.Fields = append(r.Fields, fmt.Sprintf("%v", c)) } - log.Debug().Msgf("GENERIC %#v", r) return nil } diff --git a/internal/ui/flash.go b/internal/ui/flash.go index b1881d95..8a6d6aef 100644 --- a/internal/ui/flash.go +++ b/internal/ui/flash.go @@ -64,7 +64,7 @@ func (f *Flash) StylesChanged(s *config.Styles) { // Info displays an info flash message. func (f *Flash) Info(msg string) { - f.setMessage(FlashInfo, msg) + f.SetMessage(FlashInfo, msg) } // Infof displays a formatted info flash message. @@ -74,7 +74,7 @@ func (f *Flash) Infof(fmat string, args ...interface{}) { // Warn displays a warning flash message. func (f *Flash) Warn(msg string) { - f.setMessage(FlashWarn, msg) + f.SetMessage(FlashWarn, msg) } // Warnf displays a formatted warning flash message. @@ -85,7 +85,7 @@ func (f *Flash) Warnf(fmat string, args ...interface{}) { // Err displays an error flash message. func (f *Flash) Err(err error) { log.Error().Err(err).Msgf("%v", err) - f.setMessage(FlashErr, err.Error()) + f.SetMessage(FlashErr, err.Error()) } // Errf displays a formatted error flash message. @@ -98,10 +98,10 @@ func (f *Flash) Errf(fmat string, args ...interface{}) { } } log.Error().Err(err).Msgf(fmat, args...) - f.setMessage(FlashErr, fmt.Sprintf(fmat, args...)) + f.SetMessage(FlashErr, fmt.Sprintf(fmat, args...)) } -func (f *Flash) setMessage(level FlashLevel, msg ...string) { +func (f *Flash) SetMessage(level FlashLevel, msg ...string) { if f.cancel != nil { f.cancel() } diff --git a/internal/ui/select_table.go b/internal/ui/select_table.go index 388fd4e9..1bf4e6d1 100644 --- a/internal/ui/select_table.go +++ b/internal/ui/select_table.go @@ -49,11 +49,10 @@ type Tabular interface { type SelectTable struct { *tview.Table - model Tabular - selectedRow int - selectedFn func(string) string - selectionListeners []SelectedRowFunc - marks map[string]struct{} + model Tabular + selectedRow int + selectedFn func(string) string + marks map[string]struct{} } // SetModel sets the table model. @@ -138,21 +137,12 @@ func (s *SelectTable) updateSelection(broadcast bool) { } func (s *SelectTable) selectionChanged(r, c int) { - s.selectedRow = r - if r == 0 { + if r <= 0 { return } - - if _, ok := s.marks[s.GetSelectedItem()]; ok { - s.SetSelectedStyle(tcell.ColorBlack, tcell.ColorCadetBlue, tcell.AttrBold) - } else { - cell := s.GetCell(r, c) - s.SetSelectedStyle(tcell.ColorBlack, cell.Color, tcell.AttrBold) - } - - for _, f := range s.selectionListeners { - f(r) - } + s.selectedRow = r + cell := s.GetCell(r, c) + s.SetSelectedStyle(tcell.ColorBlack, cell.Color, tcell.AttrBold) } // ClearMarks delete all marked items. @@ -192,8 +182,3 @@ func (s *Table) IsMarked(item string) bool { _, ok := s.marks[item] return ok } - -// AddSelectedRowListener add a new selected row listener. -func (s *SelectTable) AddSelectedRowListener(f SelectedRowFunc) { - s.selectionListeners = append(s.selectionListeners, f) -} diff --git a/internal/view/app.go b/internal/view/app.go index ee01bfda..09bc7042 100644 --- a/internal/view/app.go +++ b/internal/view/app.go @@ -299,7 +299,7 @@ func (a *App) Run() { // Status reports a new app status for display. func (a *App) Status(l ui.FlashLevel, msg string) { - a.Flash().Info(msg) + a.Flash().SetMessage(l, msg) a.setIndicator(l, msg) a.setLogo(l, msg) a.Draw() diff --git a/internal/view/browser.go b/internal/view/browser.go index 7feb2bd4..6cbef436 100644 --- a/internal/view/browser.go +++ b/internal/view/browser.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "strconv" + "time" "github.com/derailed/k9s/internal" "github.com/derailed/k9s/internal/client" @@ -50,7 +51,6 @@ func (b *Browser) Init(ctx context.Context) error { return err } if !dao.IsK9sMeta(b.meta) { - log.Debug().Msgf("BROWSER ACTIVE_NS %q", b.app.Config.ActiveNamespace()) if _, e := b.app.factory.CanForResource(b.app.Config.ActiveNamespace(), b.GVR(), []string{"list", "watch"}); e != nil { return e } @@ -71,7 +71,7 @@ func (b *Browser) Init(ctx context.Context) error { b.Select(1, 0) } b.GetModel().AddListener(b) - b.App().Status(ui.FlashWarn, "Loading...") + b.GetModel().SetRefreshRate(time.Duration(b.App().Config.K9s.GetRefreshRate()) * time.Second) return nil } @@ -87,6 +87,7 @@ func (b *Browser) bindKeys() { func (b *Browser) Start() { b.Stop() + b.App().Status(ui.FlashInfo, "Loading...") b.Table.Start() ctx := b.defaultContext() ctx, b.cancelFn = context.WithCancel(ctx) @@ -105,7 +106,6 @@ func (b *Browser) Stop() { return } b.Table.Stop() - log.Debug().Msgf("BROWSER %q", b.gvr) b.cancelFn() b.cancelFn = nil } @@ -131,19 +131,19 @@ func (b *Browser) Aliases() []string { // ---------------------------------------------------------------------------- // Model Protocol... -// TableLoadFailed notifies view something went south. -func (b *Browser) TableLoadFailed(err error) { - b.app.QueueUpdateDraw(func() { - b.app.Flash().Err(err) - b.App().ClearStatus(false) - }) -} - // TableDataChanged notifies view new data is available. func (b *Browser) TableDataChanged(data render.TableData) { b.app.QueueUpdateDraw(func() { b.refreshActions() b.Update(data) + b.App().ClearStatus(true) + }) +} + +// TableLoadFailed notifies view something went south. +func (b *Browser) TableLoadFailed(err error) { + b.app.QueueUpdateDraw(func() { + b.app.Flash().Err(err) b.App().ClearStatus(false) }) }