« index

Coverage for /Users/yunong/workspace/node-restify/lib/dtrace.js : 95%

82 lines | 78 run | 4 missing | 0 partial | 13 blocks | 5 blocks run | 8 blocks missing

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

  // Copyright 2012 Mark Cavage, Inc.  All rights reserved.
  
  
  ///--- Globals
  
  var ID = 0;
  var MAX_INT = Math.pow(2, 32) - 1;
  
  var PROBES = {
      // server_name, route_name, id, method, url, headers (json)
      'route-start': ['char *', 'char *', 'int', 'char *', 'char *', 'json'],
  
      // server_name, route_name, handler_name, id
      'handler-start': ['char *', 'char *', 'char *', 'int'],
  
      // server_name, route_name, handler_name, id
      'handler-done': ['char *', 'char *', 'char *', 'int'],
  
      // server_name, route_name, id, statusCode, headers (json)
      'route-done': ['char *', 'char *', 'int', 'int', 'json'],
  
  
      // Client probes
      // method, url, headers, id
      'client-request': ['char *', 'char *', 'json', 'int'],
      // id, statusCode, headers
      'client-response': ['int', 'int', 'json'],
      // id, Error.toString()
      'client-error': ['id', 'char *']
  };
  var PROVIDER;
  
  
  ///--- API
  
  module.exports = function exportStaticProvider() {
      if (!PROVIDER) {
          try {
              var dtrace = require('dtrace-provider');
              PROVIDER = dtrace.createDTraceProvider('restify');
          } catch (e) {
              PROVIDER = {
                  fire: function () {
                  },
                  enable: function () {
                  },
                  addProbe: function () {
                      var p = {
                          fire: function () {
                          }
                      };
                      return (p);
                  },
                  removeProbe: function () {
                  },
                  disable: function () {
                  }
              };
          }
  
          PROVIDER._rstfy_probes = {};
  
          Object.keys(PROBES).forEach(function (p) {
              var args = PROBES[p].splice(0);
              args.unshift(p);
  
              var probe = PROVIDER.addProbe.apply(PROVIDER, args);
              PROVIDER._rstfy_probes[p] = probe;
          });
  
          PROVIDER.enable();
  
          PROVIDER.nextId = function nextId() {
              if (++ID >= MAX_INT)
                  ID = 1;
  
              return (ID);
          };
      }
  
      return (PROVIDER);
  }();
« index | cover.io