mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-16 02:24:06 -08:00
5d401f1e1b
* Added query logging for prometheus. Options added: 1) active.queries.filepath: Filename where queries will be recorded 2) active.queries.filesize: Size of the file where queries will be recorded. Functionality added: All active queries are now logged in a file. If prometheus crashes unexpectedly, these queries are also printed out on stdout in the rerun. Queries are written concurrently to an mmaped file, and removed once they are done. Their positions in the file are reused. They are written in json format. However, due to dynamic nature of application, the json has an extra comma after the last query, and is missing an ending ']'. There may also null bytes in the tail of file. Signed-off-by: Advait Bhatwadekar <advait123@ymail.com>
52 lines
1,019 B
Go
52 lines
1,019 B
Go
// Copyright 2011 Evan Shaw. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build darwin dragonfly freebsd linux openbsd solaris netbsd
|
|
|
|
package mmap
|
|
|
|
import (
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
func mmap(len int, inprot, inflags, fd uintptr, off int64) ([]byte, error) {
|
|
flags := unix.MAP_SHARED
|
|
prot := unix.PROT_READ
|
|
switch {
|
|
case inprot© != 0:
|
|
prot |= unix.PROT_WRITE
|
|
flags = unix.MAP_PRIVATE
|
|
case inprot&RDWR != 0:
|
|
prot |= unix.PROT_WRITE
|
|
}
|
|
if inprot&EXEC != 0 {
|
|
prot |= unix.PROT_EXEC
|
|
}
|
|
if inflags&ANON != 0 {
|
|
flags |= unix.MAP_ANON
|
|
}
|
|
|
|
b, err := unix.Mmap(int(fd), off, len, prot, flags)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return b, nil
|
|
}
|
|
|
|
func (m MMap) flush() error {
|
|
return unix.Msync([]byte(m), unix.MS_SYNC)
|
|
}
|
|
|
|
func (m MMap) lock() error {
|
|
return unix.Mlock([]byte(m))
|
|
}
|
|
|
|
func (m MMap) unlock() error {
|
|
return unix.Munlock([]byte(m))
|
|
}
|
|
|
|
func (m MMap) unmap() error {
|
|
return unix.Munmap([]byte(m))
|
|
}
|