]> jfr.im git - irc/quakenet/newserv.git/blob - lua/luacontrol.c
Add profiling code.
[irc/quakenet/newserv.git] / lua / luacontrol.c
1 /* Copyright (C) Chris Porter 2005 */
2 /* ALL RIGHTS RESERVED. */
3 /* Don't put this into the SVN repo. */
4 /* Copyright (C) Chris Porter 2005 */
5
6 #include "../control/control.h"
7 #include "../nick/nick.h"
8
9 #include "lua.h"
10
11 int lua_inslua(void *sender, int cargc, char **cargv);
12 int lua_rmlua(void *sender, int cargc, char **cargv);
13 int lua_reloadlua(void *sender, int cargc, char **cargv);
14 int lua_lslua(void *sender, int cargc, char **cargv);
15
16 void lua_startcontrol(void) {
17 registercontrolhelpcmd("inslua", NO_DEVELOPER, 1, &lua_inslua, "Usage: inslua <script>\nLoads the supplied Lua script..");
18 registercontrolhelpcmd("rmlua", NO_DEVELOPER, 1, &lua_rmlua, "Usage: rmlua <script>\nUnloads the supplied Lua script.");
19 registercontrolhelpcmd("reloadlua", NO_DEVELOPER, 1, &lua_reloadlua, "Usage: reloadlua <script>\nReloads the supplied Lua script.");
20 registercontrolhelpcmd("lslua", NO_DEVELOPER, 0, &lua_lslua, "Usage: lslua\nLists all currently loaded Lua scripts and shows their memory usage.");
21 }
22
23 void lua_destroycontrol(void) {
24 deregistercontrolcmd("inslua", &lua_inslua);
25 deregistercontrolcmd("rmlua", &lua_rmlua);
26 deregistercontrolcmd("reloadlua", &lua_reloadlua);
27 deregistercontrolcmd("lslua", &lua_lslua);
28 }
29
30
31 int lua_inslua(void *sender, int cargc, char **cargv) {
32 nick *np = (nick *)sender;
33 char *script = cargv[0];
34
35 if(cargc < 1) {
36 controlreply(np, "Usage: inslua <script>");
37 return CMD_ERROR;
38 }
39
40 if(lua_scriptloaded(script)) {
41 controlreply(np, "Script %s already loaded, or name not valid.", script);
42 return CMD_ERROR;
43 }
44
45 if(lua_loadscript(script)) {
46 controlreply(np, "Script %s loaded.", script);
47 return CMD_OK;
48 } else {
49 controlreply(np, "Unable to load script %s.", script);
50 return CMD_ERROR;
51 }
52 }
53
54 int lua_rmlua(void *sender, int cargc, char **cargv) {
55 nick *np = (nick *)sender;
56 char *script = cargv[0];
57 lua_list *l;
58
59 if(cargc < 1) {
60 controlreply(np, "Usage: rmmod <script>");
61 return CMD_ERROR;
62 }
63
64 l = lua_scriptloaded(script);
65 if(!l) {
66 controlreply(np, "Script %s is not loaded.", script);
67 return CMD_ERROR;
68 }
69
70 lua_unloadscript(l);
71 controlreply(np, "Script %s unloaded.", script);
72
73 return CMD_OK;
74 }
75
76 int lua_reloadlua(void *sender, int cargc, char **cargv) {
77 if(cargc < 1) {
78 controlreply((nick *)sender, "Usage: reloadlua <script>");
79 return CMD_ERROR;
80 }
81
82 lua_rmlua(sender, cargc, cargv);
83
84 return lua_inslua(sender, cargc, cargv);
85 }
86
87 int lua_lslua(void *sender, int cargc, char **cargv) {
88 nick *np = (nick *)sender;
89 lua_list *l = lua_head;
90
91 controlreply(np, "Loaded scripts:");
92
93 for(l=lua_head;l;l=l->next)
94 controlreply(np, "%s (mem: %dKb calls: %lu user: %0.2fs sys: %0.2fs)", l->name->content, lua_gc(l->l, LUA_GCCOUNT, 0), l->calls, (double)((double)l->ru_utime.tv_sec + (double)l->ru_utime.tv_usec / USEC_DIFFERENTIAL), (double)((double)l->ru_stime.tv_sec + (double)l->ru_stime.tv_usec / USEC_DIFFERENTIAL));
95
96 controlreply(np, "Done.");
97
98 return CMD_OK;
99 }
100