1/* 2** Zabbix 3** Copyright (C) 2001-2021 Zabbix SIA 4** 5** This program is free software; you can redistribute it and/or modify 6** it under the terms of the GNU General Public License as published by 7** the Free Software Foundation; either version 2 of the License, or 8** (at your option) any later version. 9** 10** This program is distributed in the hope that it will be useful, 11** but WITHOUT ANY WARRANTY; without even the implied warranty of 12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13** GNU General Public License for more details. 14** 15** You should have received a copy of the GNU General Public License 16** along with this program; if not, write to the Free Software 17** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18**/ 19 20package uptime 21 22import ( 23 "bufio" 24 "errors" 25 "fmt" 26 "strconv" 27 "strings" 28 "time" 29 30 "zabbix.com/pkg/std" 31) 32 33func getUptime() (uptime int, err error) { 34 var file std.File 35 if file, err = stdOs.Open("/proc/stat"); err != nil { 36 err = fmt.Errorf("Cannot read boot time: %s", err.Error()) 37 return 38 } 39 defer file.Close() 40 41 scanner := bufio.NewScanner(file) 42 for scanner.Scan() { 43 if strings.HasPrefix(scanner.Text(), "btime") { 44 var boot int 45 if boot, err = strconv.Atoi(scanner.Text()[6:]); err != nil { 46 return 47 } 48 return int(time.Now().Unix()) - boot, nil 49 } 50 } 51 52 return 0, errors.New("Cannot locate boot time") 53} 54