func printNodeStart(buf *bytes.Buffer, n nodeDetails) { // time.Seconds() is intentionally not used here. Millisecond // precision is enough. relativeStartMillis := n.relativeStart.Nanoseconds() / (1000 * 1000) relativeStopMillis := n.relativeStop.Nanoseconds() / (1000 * 1000) buf.WriteByte('[') jsonx.AppendInt(buf, relativeStartMillis) buf.WriteByte(',') jsonx.AppendInt(buf, relativeStopMillis) buf.WriteByte(',') jsonx.AppendString(buf, n.name) buf.WriteByte(',') if nil == n.params { buf.WriteString("{}") } else { n.params.WriteJSON(buf) } buf.WriteByte(',') buf.WriteByte('[') }
func (slow *slowQuery) WriteJSON(buf *bytes.Buffer) { buf.WriteByte('[') jsonx.AppendString(buf, slow.TxnName) buf.WriteByte(',') jsonx.AppendString(buf, slow.TxnURL) buf.WriteByte(',') jsonx.AppendInt(buf, int64(makeSlowQueryID(slow.ParameterizedQuery))) buf.WriteByte(',') jsonx.AppendString(buf, slow.ParameterizedQuery) buf.WriteByte(',') jsonx.AppendString(buf, slow.DatastoreMetric) buf.WriteByte(',') jsonx.AppendInt(buf, int64(slow.Count)) buf.WriteByte(',') jsonx.AppendFloat(buf, slow.Total.Seconds()*1000.0) buf.WriteByte(',') jsonx.AppendFloat(buf, slow.Min.Seconds()*1000.0) buf.WriteByte(',') jsonx.AppendFloat(buf, slow.Duration.Seconds()*1000.0) buf.WriteByte(',') w := jsonFieldsWriter{buf: buf} buf.WriteByte('{') if "" != slow.Host { w.stringField("host", slow.Host) } if "" != slow.PortPathOrID { w.stringField("port_path_or_id", slow.PortPathOrID) } if "" != slow.DatabaseName { w.stringField("database_name", slow.DatabaseName) } if nil != slow.StackTrace { w.writerField("backtrace", slow.StackTrace) } if nil != slow.QueryParameters { w.writerField("query_parameters", slow.QueryParameters) } buf.WriteByte('}') buf.WriteByte(']') }
func (w *jsonFieldsWriter) intField(key string, val int64) { w.addKey(key) jsonx.AppendInt(w.buf, val) }