A possible way to Log User- and Page-Access to statsd is via the Event system - using Adaptavist's Scriptrunner for Confluence, se https://scriptrunner.adaptavist.com/latest/confluence/ConfluenceEventHandlers.html#_collecting_stats
...
Kodeblok |
---|
|
import com.atlassian.confluence.user.AuthenticatedUserThreadLocal
import com.atlassian.confluence.user.*;
import java.net.URL;
import java.net.URLEncoder;
import java.net.MalformedURLException;
import java.io.UnsupportedEncodingException;
import com.atlassian.confluence.pages.Page
import com.atlassian.confluence.pages.PageManager
import com.atlassian.confluence.spaces.Space
import com.atlassian.confluence.spaces.SpaceManager
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.confluence.event.events.content.page.*
import groovy.transform.Field
import java.net.InetAddress;
import java.net.DatagramPacket
System.out.println("Start post2splunk.groovy")
def spaceManager = ComponentLocator.getComponent(SpaceManager)
def pageManager = ComponentLocator.getComponent(PageManager)
String userName="Anonymous"
def currentUser = AuthenticatedUserThreadLocal.get()
if (currentUser)
{
userName=(String)currentUser.name
}
System.out.println("Step 1 post2splunk.groovy")
def event = event as PageEvent
//String eventType=(String)event.toString()
//eventType=eventType.replaceAll("com.atlassian.confluence.event.events.content.page.","")
//eventType=eventType.substring(0, eventType.indexOf('@'))
//eventType=eventType.replaceAll("Event","")
// keys to create unique nodes for counters
// https://docs.atlassian.com/confluence/5.9.7/com/atlassian/confluence/pages/Page.html
System.out.println("Step 2 post2splunk.groovy")
@Field final def host = "127.0.0.1"
@Field final def port = 8125
//String spaceKey = event.page.getSpace().getKey()
//String pageId = event.page.getIdAsString()
//String pageName = event.page.getTitle()
// keys to create unique nodes for counters
def spaceKey = event.page.spaceKey
def pageId = event.page.id as String
//def userKey = currentUser.name
def nodeId = "confluence.stats.views"
// build the unique metric keys
def pageViewMetricKey = "${nodeId}.page.${pageId}"
def spaceViewMetricKey = "${nodeId}.space.${spaceKey}"
def userViewMetricKey = "${nodeId}.user.${userName}.${pageId}"
System.out.println("Step 3 post2splunk.groovy")
// increase by one the counters for the following metric keys
increaseByOne(pageViewMetricKey, userViewMetricKey, spaceViewMetricKey)
def increaseByOne(String... keys) {
def dataToSend = ""
def value = 1 //increase counter by one
System.out.println("Step 4 post2splunk.groovy")
//syntax for counter according to https://github.com/etsy/statsd/blob/master/docs/metric_types.md
for (key in keys) {
dataToSend += "${key}:${value}|c\n"
}
System.out.println("Step 5 post2splunk.groovy")
def data = dataToSend.getBytes()
//def address = InetAddress.getByName(host as String)
def address = InetAddress.getLocalHost();
def packet = new DatagramPacket(data, data.length, address, port as int)
def socket = new DatagramSocket()
try {
System.out.println("Step 6 post2splunk.groovy")
socket.send(packet)
} finally {
System.out.println("Step 7 post2splunk.groovy")
socket.close()
}
}
System.out.println("End post2splunk.groovy")
|